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

T-SQL如何按30分钟间隔统计calls表中每位员工的通话数量

T-SQL按30分钟间隔统计员工通话次数实现方案

以下是最简实现代码:

SELECT
    CONCAT(
        FORMAT(DATEADD(MINUTE, DATEDIFF(MINUTE, CAST(call_pick_up_time AS DATE), call_pick_up_time) / 30 * 30, CAST(call_pick_up_time AS DATE)), 'HH:mm'),
        ' - ',
        FORMAT(DATEADD(MINUTE, (DATEDIFF(MINUTE, CAST(call_pick_up_time AS DATE), call_pick_up_time) / 30 * 30) + 30, CAST(call_pick_up_time AS DATE)), 'HH:mm')
    ) AS [interval],
    employee,
    COUNT(*) AS call_count
FROM calls
GROUP BY
    CAST(call_pick_up_time AS DATE),
    DATEDIFF(MINUTE, CAST(call_pick_up_time AS DATE), call_pick_up_time) / 30,
    employee
ORDER BY
    CAST(call_pick_up_time AS DATE),
    [interval],
    employee

逻辑说明

  • 核心计算逻辑:通过DATEDIFF计算通话时间距离当日0点的总分钟数,除以30取整后再乘30,即可对齐到对应30分钟间隔的起始时间,加30分钟即为间隔结束时间
  • 默认按天拆分时段统计,如果你需要统计所有日期同一时段的总通话量,删掉GROUP BY和ORDER BY里的CAST(call_pick_up_time AS DATE)即可
  • 可按需在FROM后加WHERE条件过滤数据,比如只统计8:00-20:00的通话,添加WHERE DATEPART(HOUR, call_pick_up_time) BETWEEN 8 AND 19即可

低版本SQL Server兼容方案(不支持FORMAT函数):
把interval的计算逻辑替换为以下写法即可:

CONVERT(VARCHAR(5), DATEADD(MINUTE, DATEDIFF(MINUTE, CAST(call_pick_up_time AS DATE), call_pick_up_time) / 30 * 30, CAST(call_pick_up_time AS DATE)), 108)
+ ' - ' +
CONVERT(VARCHAR(5), DATEADD(MINUTE, (DATEDIFF(MINUTE, CAST(call_pick_up_time AS DATE), call_pick_up_time) / 30 * 30) + 30, CAST(call_pick_up_time AS DATE)), 108)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:39:03