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

如何将最近24小时SQL查询结果按三个时段拆分

SQL改写方案:按指定时间段拆分统计最近24小时数据

针对需求,我们可以通过CASE语句结合时间函数,给每条数据标记所属时间段,再根据需要选择保留明细或进行聚合统计。以下是两种常用方案:

方案1:保留明细并标记时间段

该方案在原查询基础上新增时间段标签,方便查看每条数据所属的时段,同时可按时段排序:

SELECT 
    "inmain"."calltime", 
    "inmain"."business", 
    "inmain"."agency", 
    "inmain"."case_id", 
    "inmain"."nature", 
    "inmain"."street", 
    "inmain"."inci_id",
    -- 根据小时判断所属时间段
    CASE
        WHEN DATEPART(HOUR, "inmain"."calltime") BETWEEN 7 AND 14 THEN '7:00-15:00'
        WHEN DATEPART(HOUR, "inmain"."calltime") BETWEEN 15 AND 22 THEN '15:00-23:00'
        ELSE '23:00-7:00'
    END AS time_period
FROM   "cad"."dbo"."inmain" "inmain"
WHERE  "inmain"."agency" = 'YUPD' 
AND "inmain"."calltime" > GETDATE() - 1
ORDER BY time_period, "inmain"."nature"

方案2:按时间段聚合统计

如果需要统计各时间段的案件数量(或其他指标),可以用GROUP BY结合CASE语句实现:

按时间段+案件类型统计

SELECT 
    CASE
        WHEN DATEPART(HOUR, "inmain"."calltime") BETWEEN 7 AND 14 THEN '7:00-15:00'
        WHEN DATEPART(HOUR, "inmain"."calltime") BETWEEN 15 AND 22 THEN '15:00-23:00'
        ELSE '23:00-7:00'
    END AS time_period,
    "inmain"."nature",
    COUNT(*) AS case_count -- 统计每个时段下各案件类型的数量
FROM   "cad"."dbo"."inmain" "inmain"
WHERE  "inmain"."agency" = 'YUPD' 
AND "inmain"."calltime" > GETDATE() - 1
GROUP BY 
    CASE
        WHEN DATEPART(HOUR, "inmain"."calltime") BETWEEN 7 AND 14 THEN '7:00-15:00'
        WHEN DATEPART(HOUR, "inmain"."calltime") BETWEEN 15 AND 22 THEN '15:00-23:00'
        ELSE '23:00-7:00'
    END,
    "inmain"."nature"
ORDER BY time_period, "inmain"."nature"

仅按时间段统计总数量

如果只需各时段的总案件数,去掉nature相关的分组和字段即可:

SELECT 
    CASE
        WHEN DATEPART(HOUR, "inmain"."calltime") BETWEEN 7 AND 14 THEN '7:00-15:00'
        WHEN DATEPART(HOUR, "inmain"."calltime") BETWEEN 15 AND 22 THEN '15:00-23:00'
        ELSE '23:00-7:00'
    END AS time_period,
    COUNT(*) AS total_cases
FROM   "cad"."dbo"."inmain" "inmain"
WHERE  "inmain"."agency" = 'YUPD' 
AND "inmain"."calltime" > GETDATE() - 1
GROUP BY 
    CASE
        WHEN DATEPART(HOUR, "inmain"."calltime") BETWEEN 7 AND 14 THEN '7:00-15:00'
        WHEN DATEPART(HOUR, "inmain"."calltime") BETWEEN 15 AND 22 THEN '15:00-23:00'
        ELSE '23:00-7:00'
    END
ORDER BY time_period

说明

  • 用DATEPART(HOUR, calltime)提取呼叫时间的小时数,通过CASE语句匹配三个时段:
    • 7:00-15:00对应小时7到14(包含7:00,不包含15:00)
    • 15:00-23:00对应小时15到22(包含15:00,不包含23:00)
    • 剩余小时(23到6)自动归为23:00-7:00
  • 原查询的GETDATE()-1逻辑保持不变,确保只取最近24小时的数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:07:42