基于MS SQL Server按班次聚合动作日志数据的SQL查询需求
基于MS SQL Server的操作日志班次聚合查询
现有Action_Log表记录单名员工的操作及对应时间戳,无员工排班表,需仅依靠日志将操作按预设班次类型(ShiftA:11:00-23:00、ShiftB:13:00-21:00)聚合,区分不同班次编号。
原表结构及示例数据
| Action_ID | Action_DTTM |
|---|---|
| 1 | 04/19/2023 11:15:37 |
| 2 | 04/19/2023 12:16:14 |
| 3 | 04/19/2023 12:16:14 |
| 4 | 04/19/2023 14:21:03 |
| 5 | 04/19/2023 16:55:41 |
| 6 | 04/19/2023 18:10:43 |
| 7 | 04/19/2023 20:24:15 |
| 8 | 04/19/2023 22:43:29 |
| 9 | 04/20/2023 13:21:04 |
| 10 | 04/20/2023 13:55:57 |
| 11 | 04/20/2023 13:55:57 |
| 12 | 04/20/2023 16:28:11 |
| 13 | 04/20/2023 17:35:45 |
| 14 | 04/20/2023 18:48:01 |
| 15 | 04/20/2023 19:32:26 |
| 16 | 04/20/2023 20:16:39 |
| 17 | 04/20/2023 21:03:25 |
期望输出
| Action_ID | Shift_Number | Shift_Type |
|---|---|---|
| 1 | 1 | ShiftA |
| 2 | 1 | ShiftA |
| 3 | 1 | ShiftA |
| 4 | 1 | ShiftA |
| 5 | 1 | ShiftA |
| 6 | 1 | ShiftA |
| 7 | 1 | ShiftA |
| 8 | 1 | ShiftA |
| 9 | 2 | ShiftB |
| 10 | 2 | ShiftB |
| 11 | 2 | ShiftB |
| 12 | 2 | ShiftB |
| 13 | 2 | ShiftB |
| 14 | 2 | ShiftB |
| 15 | 2 | ShiftB |
| 16 | 2 | ShiftB |
| 17 | 2 | ShiftB |
实现SQL查询
WITH ShiftInfo AS ( SELECT Action_ID, Action_DTTM, -- 优先匹配ShiftB,剩余符合ShiftA时段的归类为ShiftA CASE WHEN CAST(Action_DTTM AS TIME) BETWEEN '13:00:00' AND '21:00:00' THEN 'ShiftB' WHEN CAST(Action_DTTM AS TIME) BETWEEN '11:00:00' AND '23:00:00' THEN 'ShiftA' -- 若存在超出两个班次的时间,可根据需求自定义逻辑,这里暂归为ShiftA ELSE 'ShiftA' END AS Shift_Type, CAST(Action_DTTM AS DATE) AS Action_Date FROM Action_Log ), ShiftNumber AS ( SELECT Action_Date, Shift_Type, DENSE_RANK() OVER (ORDER BY Action_Date, Shift_Type) AS Shift_Number FROM ShiftInfo GROUP BY Action_Date, Shift_Type ) SELECT si.Action_ID, sn.Shift_Number, si.Shift_Type FROM ShiftInfo si JOIN ShiftNumber sn ON si.Action_Date = sn.Action_Date AND si.Shift_Type = sn.Shift_Type ORDER BY si.Action_ID;
逻辑说明
- ShiftInfo CTE:提取操作日期,将每个操作的时间转换为时段后,优先匹配ShiftB的时间范围,剩余符合ShiftA时段的操作归类为ShiftA;
- ShiftNumber CTE:按日期+班次类型分组,用
DENSE_RANK()生成连续的班次编号; - 最后关联两个CTE,输出每个操作对应的班次编号和类型。
内容的提问来源于stack exchange,提问作者crackersNcheese
相关产品推荐
相关产品推荐

