我有一张桌子,上面有注册以及他们注册的日期。我想运行一个查询,提供每天总注册量的输出。
我有以下查询:
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),但仍然出现与上述相同的错误。
答案 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)
。