You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:07:36