SQL Server 2019实现每小时仅返回一条数据的查询求助
解决SQL Server 2019中最近24小时每小时取一条数据的问题
根据你的需求,要从最近24小时的数据中,每个小时仅返回一条(示例中为该小时最早的记录),可以通过两种方式实现:
方法一:使用窗口函数(适合返回整行数据的场景)
通过ROW_NUMBER()窗口函数按小时分组,标记每个小时内的第一条记录,再筛选出目标数据:
WITH HourlyData AS ( SELECT *, -- 将时间截断到所属小时的起始时刻,作为分组依据 DATEADD(HOUR, DATEDIFF(HOUR, 0, update_date), 0) AS hour_group, -- 按小时分组,组内按时间升序编号,最早的记录编号为1 ROW_NUMBER() OVER (PARTITION BY DATEADD(HOUR, DATEDIFF(HOUR, 0, update_date), 0) ORDER BY update_date ASC) AS rn FROM your_table_name -- 替换为你的实际表名 WHERE update_date >= DATEADD(HOUR, -24, GETDATE()) ) SELECT * FROM HourlyData WHERE rn = 1 ORDER BY update_date ASC;
方法二:分组聚合(仅需返回时间字段时更简洁)
直接按小时分组,取每个小时的最早时间,完全匹配你的示例需求:
SELECT MIN(update_date) AS hourly_first_record FROM your_table_name -- 替换为你的实际表名 WHERE update_date >= DATEADD(HOUR, -24, GETDATE()) GROUP BY DATEADD(HOUR, DATEDIFF(HOUR, 0, update_date), 0) ORDER BY hourly_first_record ASC;
说明
- 两种方法中的
DATEADD(HOUR, DATEDIFF(HOUR, 0, update_date), 0)是SQL Server中截断时间到小时的常用写法,会把任意时间转换为其所属小时的起始时刻(如2023-11-28 15:10:33转为2023-11-28 15:00:00),以此作为分组依据。 - 方法一可以返回整行数据,方法二更适合只需要时间字段的场景,两者都能得到你期望的结果。
内容的提问来源于stack exchange,提问作者hahaha JO
相关产品推荐
相关产品推荐

