日期之间的SQL分组?

Posted

技术标签:

【中文标题】日期之间的SQL分组?【英文标题】:SQL Group by between dates? 【发布时间】: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 我的错误日期不被识别为内置函数名 【参考方案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)。

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

【讨论】:

以上是关于日期之间的SQL分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 SQL Server 中按日期和用户分组的条目之间的平均时间?

sql server 分组查询结合日期模糊查询

sql 显示如何拉出列表,在特定日期之间拉出某些上诉和贡献,以及(customer 4)按customer_no和HAVING S分组

sql 分组 求累计值

sql数据库怎么实现分组并取每组的前1条语句,按日期排序?

如何使用sql从日期字段按月分组