当前位置: 首页 > 面试题库 >

使用条件SQL每月统计摘要记录

翟渝
2023-03-14
问题内容

我有一张表,我们称它们为桌子 SUMMARYDATA

NIP  NAME   DEPARTMENT       STATUSIN           STATUSOUT             TOTALLOSTTIME 
------------------------------------------------------------------------------------------------
A1   ARIA   BB         2020-01-21 08:06:23  2020-01-21 11:58:36         00:23:15             
A2   CHLOE  BB         2020-01-21 07:34:27  2020-01-21 17:19:47         01:19:19               
A1   ARIA   BB         2020-01-22 08:00:00  2020-01-22 11:00:00         01:10:00
A2   CHLOE  BB         2020-01-22 08:05:00  2020-01-21 10:30:00         00:20:00
A11  BELLE  CC         2020-01-21 09:06:20  2020-01-21 13:58:31         00:25:10             
A21  ZIYA   CC         2020-01-21 08:34:27  2020-01-21 17:19:47         02:29:39               
A11  BELLE  CC         2020-01-22 07:06:00  2020-01-22 10:30:00         01:11:00
A21  ZIYA   CC         2020-01-22 09:05:00  2020-01-21 11:40:00         00:20:00

我需要每月COUNT的记录where sum(TOTALLOSTIME) group by nip,name,department > 02:00:00并更新为table REPORTDATA,这是我的意思是一个示例输出:

DEPARTMENT     MONTH    YEAR   RTOTALLOSTTIME 
------------------------------------------------------------------------------------------------
  BB            01      2020           0              
  CC            01      2020           1

在数据类型列TOTALLOSTTIMEISnvarchar

到目前为止,这是我尝试过的:

select  MONTH(STATUSIN), YEAR(STATUSIN),NIP,NAME,DEPARTMENT,convert(varchar,dateadd(second,sum(datediff(second,'00:00:00',cast(TOTALLOSTTIME as time))),0),108) as sum_lost_time
from SUMMARYDATA b group by MONTH(STATUSIN), YEAR(STATUSIN),NIP,NAME,DEPARTMENT

该查询仅TOTALLOSTTIME在每个员工和每个月显示一次。


问题答案:

尝试以下

select x.department
       ,x.month
       ,x.year     
       ,count(case when x.sum_lost_time >'02:00:00' then NAME end) as RTOTALLOSTTIME 
 from (select MONTH(STATUSIN)  as [month]
               ,YEAR(STATUSIN) as [year]
               ,NIP
               ,NAME
               ,DEPARTMENT         
               ,convert(varchar,dateadd(second,sum(datediff(second,'00:00:00',cast(TOTALLOSTTIME as time))),0),108) as sum_lost_time
          from SUMMARYDATA b 
      group by MONTH(STATUSIN)
               ,YEAR(STATUSIN)
               ,NIP
               ,NAME
               ,DEPARTMENT
        )x
group by  x.department
         ,x.month
         ,x.year


 类似资料:
  • 我有一个名为-'users'的示例sql表,其中包含以下记录: 我想获得每一个用户的计数在每日,每周和每月的基础上与预期的outlike为:

  • 问题内容: 我有一张表,叫他们 我需要和每月的记录。 因为Aria和Brian每月收入只有Belle&Ziya1个,而Chloe每月收入只有2个。因此,在部门BB中,只有1即Aria,而部门CC为0,因为Chloe&Ziya。 这是我的意思是示例输出: 问题答案: 请尝试以下操作: 请在 此处 找到db <> fiddle 。

  • 问题内容: 我有一个具有“约会表”和“服务表”的数据库。每个appt都有一个服务,每个服务都有一个价格。我想要的是一个查询,该查询将始终返回12行(每月一行),并包含几个月的总和(基于其服务ID)。到目前为止,我有: 当前,返回的内容如下: 问题是,如果一个月没有任何订单,我不会在查询中返回该月。我希望该月有一个记录,只是它的“ monthly_total”等于零。 以下是我希望查询返回的内容:

  • 问题内容: 由于某种原因,我对此感到困惑。 基本上,我正在寻找一个查询,该查询将查找自2010年以来每月的新客户数量。 我有客户的电子邮件地址(email),所有下达的订单(OrderID)以及下达订单的日期(OrderDate)。该表是tblOrder。 我知道“新客户”是:(a)在日期/月份 之前 从未下过订单的人,以及(b)在日期/月份 之后 至少下过一次订单的人 我希望输出最终是这样的,用

  • 问题内容: 我正在尝试获取一些Cassandra / SPARK数据的最小,最大平均值,但我需要使用JAVA进行。 编辑以显示工作版本: 确保在“ someTable”和“ someKeyspace”周围添加“ 问题答案: 只需将您的数据导入为并应用所需的汇总即可: where 和分别存储表名和键空间。

  • 问题内容: 我正在尝试计算表中的记录,并按日期将它们分组。我当前的查询如下所示: 这行得通,除了我还要数月不存在任何记录的计数。 谁能提供有关如何实现此目标的建议/建议? 问题答案: 在MySQL中执行此操作的最简单方法是创建一个名为的表,该表列出了您感兴趣的所有月份,并在表中使用LEFT JOIN。 但是,由于这主要是一个表示问题,因此通常很容易在您已经在运行的情况下运行查询并在客户端(例如PH