【问题标题】:SQL Group by between dates?日期之间的SQL分组?
【发布时间】:2021-06-18 13:15:14
【问题描述】:

我似乎无法通过查询获得一个分组来处理日期范围。 CreationDate 示例值看起来像 9/16/2013 1:57:55 PM

有没有办法使用下面的查询来获取在 1/1/20 和 12/31/20 之间的每个进程类型的计数?

SELECT COUNT(Id), ProcessType, CreationDate
FROM tblTest
WHERE date(CreationDate) BETWEEN "2020-01-01" AND "2020-12-31"
GROUP BY ProcessType

【问题讨论】:

  • 双引号 (") 是 的 ANSI 分隔符标识符。文字字符串应该用单引号括起来 (')。
  • 另外,阅读Cast to date is sargable but is it a good idea?。 TL;DR:不。在>=< 中使用明确的日期边界。
  • 从 SELECT 中删除 CreationDate
  • 我的错误日期不被识别为内置函数名

标签: sql sql-server date


【解决方案1】:

这里实际上有几个问题。

请注意,我们将 BETWEEN 更改为 >=< 并从 SELECT 中删除了 CreationDate

SELECT COUNT(Id), ProcessType
FROM tblTest
WHERE CreationDate >= '2020-01-01' 
  AND CreationDate <  '2022-01-01"
GROUP BY ProcessType

【讨论】:

  • @user1342164 总是乐于提供帮助
  • 完美,CreationDate &lt; first_day_after_end_date 条件确保最后一天的时间考虑在内,但不包括午夜。
【解决方案2】:

我能看到的唯一问题是您没有在group by 语句中包含所有维度。 至于您在稍后的评论中描述的错误,我看到您从帖子的标签中使用了 SQL Server。 SQL Server 没有内置 date() 函数 (source)。

您可以尝试使用我链接的源中提供的另一个日期函数,它可以更好地满足您的需求,或者将创建日期转换为日期时间格式。

【讨论】:

    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多