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

Get a count of a number of records with same create date

我有一个 table 包含所有带有创建日期的记录。我想 Select 2014 年 1 月创建的所有记录,并统计每天创建的记录数。我已经 Select 查看了那个月创建的所有记录,但我不确定如何继续获取该月所有天数的输出以及创建的记录数。

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

我在该语句中选择的信息并不重要,它就在该查询中,所以我选择了一些内容。

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

如果你只需要按天计算,我建议:

SELECT COUNT(*)
FROM WORK_ORDER
WHERE DATEPART(year,CREATE_DATE) = 2014 and DATEPART(month,CREATE_DATE) = 01
GROUP BY DATEPART(DAY, CREATE_DATE)
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)

这是您要找的吗?这是一个进行计数的聚合查询:

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) ;

仅当 CREATE_DATE 可以包含时间组件时才需要 CAST()。此查询使用 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 上的索引。您的公式具有围绕参数的功能,因此它不会使用索引。

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