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

MSSQL按分钟分组统计value升序前2数据条数并输出时间区间

实现思路
  • 第一步:时间对齐到分钟维度,使用DATEADD和DATEDIFF函数计算每条数据所属分钟的起始时间,起始时间加59秒即为对应分钟的结束时间。
  • 第二步:分钟内排名,使用窗口函数DENSE_RANK()在每个分钟分组内对value做升序排名,相同value会获得相同排名,且排名序号连续不会跳号,符合升序取前2类值的统计需求。
  • 第三步:过滤统计,筛选出排名小于等于2的行,按分钟维度聚合计数即可得到最终结果。
完整MSSQL查询代码
WITH minute_data AS (
    SELECT
        -- 计算当前数据所属分钟的起始时间
        DATEADD(minute, DATEDIFF(minute, 0, [timestamp]), 0) AS starttime,
        -- 计算当前数据所属分钟的结束时间
        DATEADD(second, 59, DATEADD(minute, DATEDIFF(minute, 0, [timestamp]), 0)) AS endtime,
        value,
        -- 每分钟内按value升序排名
        DENSE_RANK() OVER (
            PARTITION BY DATEADD(minute, DATEDIFF(minute, 0, [timestamp]), 0)
            ORDER BY value ASC
        ) AS value_rank
    FROM YourTableName -- 替换为实际表名
)
SELECT
    starttime,
    endtime,
    COUNT(*) AS number
FROM minute_data
WHERE value_rank <= 2
GROUP BY starttime, endtime
ORDER BY starttime
补充说明

如果需求中前2排名需要跳过并列(比如3个并列第一的情况下,第二小的值算作第4名),把DENSE_RANK()替换为RANK()即可。

内容的提问来源于stack exchange,提问作者Amamra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:36:02