SQL按日期计数

时间:2018-10-09 15:30:56

标签: sql sql-server datetime group-by

我有一张桌子,上面有注册以及他们注册的日期。我想运行一个查询,提供每天总注册量的输出。

我有以下查询:

SELECT COUNT(dtm_SignUpDate) as TotalSignUpsPerDay, dtm_SignUpDate as Count_Date
FROM tbl_Account
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, dtm_SignUpDate)) 

但是得到

  

在选择列表中,'tbl_Account.dtm_SignUpDate'列无效,因为它既不包含在聚合函数中也不在GROUP BY子句中。

要使其正常工作,我需要更改什么。

我点击了此链接(SQL Count for each date),但仍然出现与上述相同的错误。

2 个答案:

答案 0 :(得分:2)

怎么样?

SELECT cast(dtm_SignUpDate as date) as dtm_SignUpDate, count(*) as TotalSignUpsPerDay
FROM tbl_Account
GROUP BY cast(dtm_SignUpDate as date)
ORDER BY cast(dtm_SignUpDate as date);

如果dtmSignUpDate已经是没有时间成分的日期,则:

SELECT dtm_SignUpDate, count(*) as TotalSignUpsPerDay
FROM tbl_Account
GROUP BY dtm_SignUpDate
ORDER BY dtm_SignUpDate ;

答案 1 :(得分:2)

只需按原样使用select子句中的截断日期,它已经是已删除小时/分钟/秒的日期:

SELECT
    COUNT(dtm_SignUpDate) AS TotalSignUpsPerDay,
    DATEADD(dd, 0, DATEDIFF(dd, 0, dtm_SignUpDate)) AS Count_Date
FROM tbl_Account
GROUP BY
    DATEADD(dd, 0, DATEDIFF(dd, 0, dtm_SignUpDate))

PS:人们很久以前就不再使用DATEADD(dd, 0, ...)来截断日期。您可以简单地使用CAST(DateTimeVal AS DATE)