获取具有相同创建日期的多个记录的计数

时间:2015-05-15 14:37:09

标签: sql sql-server-2008-r2

我有一个包含所有创建日期的记录的表。我想选择2014年1月创建的所有记录,并计算每天创建的记录数。我已经选择了当月创建的所有记录,但我不确定如何继续获取该月所有日期的输出以及创建了多少条记录的数量。

SELECT TYPE
,PART_ID
,DESIRED_QTY
,RECEIVED_QTY
,CREATE_DATE
FROM WORK_ORDER
WHERE DATEPART(year,CREATE_DATE) = 2014 and DATEPART(month,CREATE_DATE) = 01
ORDER BY CREATE_DATE ASC

我在该声明中选择的信息并不重要,它只是在那个查询中,所以我选择了一些东西。

5 个答案:

答案 0 :(得分:2)

SELECT DATEPART(day,CREATE_DATE), count(*) 
FROM WORK_ORDER
WHERE DATEPART(year,CREATE_DATE) = 2014 and DATEPART(month,CREATE_DATE) = 01 
group by DATEPART(day,CREATE_DATE)
ORDER BY CREATE_DATE ASC

答案 1 :(得分:1)

如果你需要的只是白天计数,我建议:

SELECT COUNT(*)
FROM WORK_ORDER
WHERE DATEPART(year,CREATE_DATE) = 2014 and DATEPART(month,CREATE_DATE) = 01
GROUP BY DATEPART(DAY, CREATE_DATE)

答案 2 :(得分:1)

SELECT
  DATE(CREATE_DATE) as day,
  COUNT(*) as count
FROM WORK_ORDER
WHERE DATEPART(year,CREATE_DATE) = 2014 and DATEPART(month,CREATE_DATE) = 01
GROUP BY DATE(CREATE_DATE)

答案 3 :(得分:1)

这是你在找什么?它是一个进行计数的聚合查询:

SELECT CAST(CREATE_DATE as Date) as date,
       COUNT(*)
FROM WORK_ORDER
WHERE DATEPART(year, CREATE_DATE) = 2014 and DATEPART(month, CREATE_DATE) = 01
GROUP BY CAST(CREATE_DATE as Date)
ORDER BY CAST(CREATE_DATE as Date) ;

只有CAST()可以包含时间组件时才需要CREATE_DATE。此查询使用CAST()的原因是相同的结构将在多个月内起作用。

我想补充一点,最好像这样编写查询:

SELECT CAST(CREATE_DATE as Date) as date, COUNT(*)
FROM WORK_ORDER
WHERE CREATE_DATE >= '2014-01-01' and CREATE_DATE < '2014-02-01'
GROUP BY CAST(CREATE_DATE as Date)
ORDER BY CAST(CREATE_DATE as Date) ;

这里的区别是WHERE子句。该公式可以使用CREATE_DATE上的索引。您的公式具有围绕参数的函数,因此它不会使用索引。

答案 4 :(得分:1)

SELECT DATEPART(year,CREATE_DATE), 
       DATEPART(month,CREATE_DATE), 
       DATEPART(day,CREATE_DATE), 
       count(*)
FROM WORK_ORDER
WHERE DATEPART(year,CREATE_DATE) = 2014 
and DATEPART(month,CREATE_DATE) = 01
group by DATEPART(year,CREATE_DATE), 
       DATEPART(month,CREATE_DATE), 
       DATEPART(day,CREATE_DATE)
ORDER BY CREATE_DATE ASC