首页 > 解决方案 > 创建一个班次摘要,班次跨越 2 天

问题描述

我有一个类似于下面示例的数据集。我需要查询和总结每班的交易数量。问题是轮班周期与一天中的正常时间不一致。

例如。2020 年 1 月 1 日的班次将于 2020 年 1 月 1 日上午 06:00 开始,并于 2020 年 1 月 2 日上午 6:00 结束

下面是一个样本数据集。

| EntityID | TransactionDateTime     |
|----------|-------------------------|
| 1        | 2020-01-01 06:53 |
| 1        | 2020-01-01 06:01 |
| 1        | 2020-01-01 13:05 |
| 1        | 2020-01-02 05:15 |
| 1        | 2020-01-02 06:14 |
| 1        | 2020-01-02 08:35 |
| 1        | 2020-01-02 01:42 |
| 2        | 2020-01-01 05:01 |
| 2        | 2020-01-01 06:01 |
| 2        | 2020-01-01 13:12 |
| 2        | 2020-01-02 05:53 |
| 2        | 2020-01-02 08:24 |

期望的结果需要看起来像这样。

| EntityID | Shift Date | Num Of Transactions |
|----------|------------|---------------------|
| 1        | 2020-01-01 | 4                   |
| 1        | 2020-01-02 | 3                   |
| 2        | 2019-12-31 | 1                   |
| 2        | 2020-01-01 | 3                   |
| 2        | 2020-01-02 | 1                   |

任何帮助将不胜感激。

标签: sqlsql-serverdate

解决方案


您可以将 6 小时的偏移量添加到交易日期,然后像这样聚合:

select 
    EntityID, 
    cast(dateadd(hour, -6, TransactionDateTime) as date) ShiftDate, 
    count(*) NumOfTransactions
from mytable
group by EntityID, cast(dateadd(hour, -6, TransactionDateTime) as date)

推荐阅读