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

如何在SQL Server中基于多条件计算人员不可用时长

计算人员不可用时长需求与SQL脚本

需求说明

需根据人员状态记录计算不可用时长,规则如下:

场景1

当start_date与end_date相同,且status='UNKNOWN'、work_status='ERROR'时,取该记录的end_date到**同人员、当日下一条同状态(UNKNOWN且ERROR)**记录的start_date的时间差。

  • 示例:rowid 3和8(person_id=2):时间差为2023-04-24 10:21:24 - 2023-04-24 10:15:24 = 6分钟
  • 若当日存在多次同状态记录,重复此逻辑:如rowid14和15(person_id=2):时间差为2023-04-24 13:45:29 - 2023-04-24 12:45:29 = 60分钟

场景2

若该人员当日无后续UNKNOWN且ERROR状态的记录,则取该人员当日上一条非UNKNOWN状态记录的end_date作为起始时间,计算与当前记录start_date的时间差。

  • 示例:person_id=1的rowid13,取rowid11的end_date(2023-04-24 15:12:09)到当前记录start_date(2023-04-24 15:47:00)的时间差为34分51秒

预期结果

统计符合上述场景的不可用时长,最终结果需包含人员ID、对应不可用时间段及时长。

测试用SQL脚本

CREATE TABLE dbo.human_sample 
(
    rowid int, 
    person_id int, 
    start_date datetime, 
    end_date datetime, 
    status varchar(100), 
    work_status varchar(100)
);

INSERT INTO dbo.human_sample VALUES (1, 1,  '2023-04-24 10:10:15',  '2023-04-24 10:15:24',  'IDLE', 'OK')
INSERT INTO dbo.human_sample VALUES (2, 1,  '2023-04-24 10:15:24'   ,'2023-04-24 10:19:45', 'IDLE', 'OK')
INSERT INTO dbo.human_sample VALUES (3, 2,  '2023-04-24 10:15:24',  '2023-04-24 10:15:24',  'UNKNOWN',  'ERROR')
INSERT INTO dbo.human_sample VALUES (4, 1,  '2023-04-24 10:45:45',  '2023-04-24 11:35:21',  'IDLE', 'OK')
INSERT INTO dbo.human_sample VALUES (5, 1,  '2023-04-24 11:35:21',  '2023-04-24 11:35:21',  'IDLE', 'OK')
INSERT INTO dbo.human_sample VALUES (6, 1,  '2023-04-24 11:35:21',  '2023-04-24 11:55:41',  'IDLE', 'OK')
INSERT INTO dbo.human_sample VALUES (7, 1,  '2023-04-24 11:55:41',  '2023-04-24 13:25:11',  'ACTIVE',   'OK')
INSERT INTO dbo.human_sample VALUES (8, 2,  '2023-04-24 10:21:24',  '2023-04-24 10:21:24',  'UNKNOWN',  'ERROR')
INSERT INTO dbo.human_sample VALUES (9, 2,  '2023-04-24 10:21:24',  '2023-04-24 11:45:49',  'IDLE', 'OK')
INSERT INTO dbo.human_sample VALUES (10,    1,  '2023-04-24 13:25:11',  '2023-04-24 14:12:41',  'ACTIVE',   'OK')
INSERT INTO dbo.human_sample VALUES (11,    1,  '2023-04-24 14:12:41',  '2023-04-24 15:12:09',  'IDLE', 'OK')
INSERT INTO dbo.human_sample VALUES (12,    2,  '2023-04-24 11:45:49',  '2023-04-24 12:45:29',  'IDLE', 'OK')
INSERT INTO dbo.human_sample VALUES (13,    1,  '2023-04-24 15:47:00',  '2023-04-24 15:47:00',  'UNKNOWN',  'ERROR')
INSERT INTO dbo.human_sample VALUES (14,    2,  '2023-04-24 12:45:29',  '2023-04-24 12:45:29',  'UNKNOWN',  'ERROR')
INSERT INTO dbo.human_sample VALUES (15,    2,  '2023-04-24 13:45:29',  '2023-04-24 13:45:29',  'UNKNOWN',  'ERROR')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:58:10