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

SQL Server中按时间范围及条件统计相同产品行数

在SQL Server中实现指定时间窗口内相同产品的统计需求

这个需求完全可以在SQL Server中实现,以下是分步实现方案:

1. 创建测试表并插入数据

注意timestamp是SQL Server的保留关键字,创建表时需用方括号包裹:

CREATE TABLE test_c (
    [timestamp] DATETIME,
    product VARCHAR(50),
    client_id INT,
    seconds INT
);

-- 插入示例测试数据(可根据实际场景调整)
INSERT INTO test_c ([timestamp], product, client_id, seconds)
VALUES
('2024-05-20 10:00:00', 'ProductA', 1, 9),
('2024-05-20 10:02:00', 'ProductA', 2, 5),
('2024-05-20 10:04:00', 'ProductA', 3, 7),
('2024-05-20 10:06:00', 'ProductA', 4, 8),
('2024-05-20 11:00:00', 'ProductB', 5, 10),
('2024-05-20 11:03:00', 'ProductB', 6, 6);

2. 生成时间窗口列并完成统计

通过窗口函数结合时间范围筛选,一次性生成before_5、after_5列,并统计符合条件的记录数:

SELECT
    [timestamp],
    product,
    client_id,
    seconds,
    DATEADD(MINUTE, -5, [timestamp]) AS before_5,
    DATEADD(MINUTE, 5, [timestamp]) AS after_5,
    CASE 
        WHEN seconds >= 8 THEN 
            COUNT(*) OVER (
                PARTITION BY product 
                ORDER BY [timestamp]
                RANGE BETWEEN INTERVAL 5 MINUTE PRECEDING AND INTERVAL 5 MINUTE FOLLOWING
            )
        ELSE NULL
    END AS same_product_count
FROM test_c;

代码说明:

  • DATEADD(MINUTE, -5, [timestamp])和DATEADD(MINUTE, 5, [timestamp])分别生成当前记录时间点的前后5分钟时间;
  • 窗口函数COUNT(*) OVER (...)按product分组,通过RANGE BETWEEN限定统计范围为当前记录的前后5分钟;
  • CASE语句仅在seconds >=8时返回统计结果,否则返回NULL。

预期结果示例

使用上述测试数据,查询结果如下:

timestampproductclient_idsecondsbefore_5after_5same_product_count
2024-05-20 10:00:00ProductA192024-05-20 09:55:002024-05-20 10:05:003
2024-05-20 10:02:00ProductA252024-05-20 09:57:002024-05-20 10:07:00NULL
2024-05-20 10:04:00ProductA372024-05-20 09:59:002024-05-20 10:09:00NULL
2024-05-20 10:06:00ProductA482024-05-20 10:01:002024-05-20 10:11:002
2024-05-20 11:00:00ProductB5102024-05-20 10:55:002024-05-20 11:05:002
2024-05-20 11:03:00ProductB662024-05-20 10:58:002024-05-20 11:08:00NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:30:25