【问题标题】:SQL Count by dateSQL 按日期计数
【发布时间】:2018-10-09 15:30:56
【问题描述】:

我有一张表格,上面有注册和他们注册的日期。我想运行一个查询,输出每天的注册总数。

我有以下疑问:

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),但仍然出现与上述相同的错误。

【问题讨论】:

  • 对于 SQL 问题,您应该始终标记 DBMS(MySQL、SQL Server、Oracle PostgreSQL,...)。你用的是哪个?

标签: sql sql-server datetime group-by


【解决方案1】:

这个怎么样?

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 ;

【讨论】:

  • 感谢 Gordon,几乎可以完美运行 - 只输出一个没有名称的列
  • @PaulHopkinson 。 . .只需给列一个别名。
【解决方案2】:

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

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)

【讨论】:

  • 如果我将 SELECT 语句修改为 Cast(dtm_SignUpDate AS DATE) as Count_Date,则重新添加 Cast 元素,然后根据原始帖子给出错误
  • 在这两个地方更改它... SELECT 和 GROUP BY。这就是错误告诉你的内容。
  • 排序的 SELECT COUNT(dtm_SignUpDate) AS TotalSignUpsPerDay, Cast(dtm_SignUpDate AS DATE) as Count_Date FROM tbl_Account GROUP BY Cast(dtm_SignUpDate AS DATE)
猜你喜欢
  • 2021-10-05
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 2010-10-17
  • 1970-01-01
相关资源
最近更新 更多