日期之间的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 < first_day_after_end_date
条件确保最后一天的时间考虑在内,但不包括午夜。【参考方案2】:
我能看到的唯一问题是您没有在group by
语句中包含所有维度。
至于您在稍后的评论中描述的错误,我看到您从帖子的标签中使用了 SQL Server。 SQL Server 没有内置 date()
函数 (source)。
您可以尝试使用我链接的源中提供的另一个日期函数,它可以更好地满足您的需求,或者将创建日期转换为日期时间格式。
【讨论】:
以上是关于日期之间的SQL分组?的主要内容,如果未能解决你的问题,请参考以下文章
如何计算 SQL Server 中按日期和用户分组的条目之间的平均时间?
sql 显示如何拉出列表,在特定日期之间拉出某些上诉和贡献,以及(customer 4)按customer_no和HAVING S分组