如何在SQL Server中按日期对记录进行分组

时间:2019-02-26 00:03:04

标签: sql sql-server tsql

让我们看一下下表

Name    TIMESTAMP   STATUS

Task1   01-01-2019  COMPLETE
Task1   01-01-2019  COMPLETE
Task2   01-01-2019  COMPLETE
Task3   02-01-2019  NOT COMPLETE
Task4   01-01-2019  COMPLETE    
Task4   02-01-2019  COMPLETE

我想要的是这样的输出:

Date       TaskName    How many completed?

January    Task1           2
January    Task2           1
January    Task3           0
January    Task4           1
February   Task1           0
February   Task2           0
February   Task3           0
February   Task4           1

我在弄清楚如何将每个任务计数到特定日期时遇到麻烦。我的表有10多个任务,大约有10万行,它们需要按日期分组,以便我们可以看到每个月成功完成了多少任务。

select DateName(month, DateAdd(month, month([TIMESTAMP]),0)-1) as 'Month', 
count(TaskName) as 'Total Processed' 
from myTable
where YEAR([TIMESTAMP]) = 2019 and TaskName = 'Task1'
group by month([TIMESTAMP]);

到目前为止,我知道这将为我提供Task1在2019年每个月完成的总次数,但是我正在努力如何将每个任务及其各自的名称放入此输出表中。有人可以建议我如何进行吗?任何指导都很棒!

3 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

SELECT DATENAME(month,[Timestamp]), Name,
       SUM(CASE WHEN [STATUS] = 'Completed' THEN 1 ELSE 0 END) as [Completed]
FROM Table1
GROUP BY DATENAME(month,[Timestamp]), Name
ORDER BY DATENAME(month,[Timestamp]), Name

答案 1 :(得分:0)

尝试一下。

select 
    case 
        when to_char(timestamp, 'MM') = '01' then 'January'
        when to_char(timestamp, 'MM') = '02' then 'Febuary'
        when to_char(timestamp, 'MM') = '03' then 'March'
        when to_char(timestamp, 'MM') = '04' then 'April'
    end as month,name, count(status)
    from myTable
    group by month,name
    order by timestamp;

答案 2 :(得分:0)

使用cross join生成行,然后使用left join引入数据:

select m.mm, n.name,
       sum(case when t.status = 'COMPLETE' then 1 else 0 end) as num_completed
from (values (convert(date, '2019-01-01'),
              convert(date, '2019-02-01')
     ) m(mm) cross join
     (select distinct name
      from t
     ) n left join
     t
     on t.name = n.name and
        t.timestamp >= m.mm and
        t.timestamp < dateadd(month, 1, m.mm)
group by m.mm, n.name;
相关问题