随着时间的推移按相似类别分组

Grouping by similar categories over time

我四处寻找了一会儿,但什么也没找到。

我有一个 table 看起来像这样:

DATE       | Shift | Parts Used

1/1/15 1:15.....1........1

1/1/15 2:06.....1........2

1/1/15 3:45.....1........3

1/1/15 7:33.....2........1

1/1/15 8:14.....2........2

1/1/15 9:00.....2........3

1/1/15 23:01....1........1

1/1/15 23:55....1........2

我想按每个班次分组。不幸的是,轮班有时会在周一早上结束并在周一晚上重新开始(有时我们的 12 小时轮班并不完全是 12 小时)。有没有一种方法可以单独按班次分组,基本上按班次分组直到班次改变,即使我的日子是一样的(我的实际列也包含时间)?我可以编写一个循环来分析数据,但是从 sql 获取它会很棒。

日期是排序行。班次不能重叠。

希望我的结果是这样的

DATE | Shift | AVG parts used

1/1/15.....1........2

1/1/15.....2........2

1/1/15.....1........1.5

编辑****** 具有预期结果的最坏情况

DATE | Shift | AVG parts used

1/1/15.....1........1.8

1/1/15.....2........2

我假设第 1 班应该从午夜开始,第 2 班从中午开始,但有时会延迟一段时间。如果这些假设为真,则此查询应该有效。我创建了一个名为 @ShiftFudgeHours 的变量来说明轮班开始时间通常有多远。根据您的数字进行调整。从你的样本来看,1 小时似乎足够了,但你可以轻松地增加它。

declare @shiftFudgeHours int = 1

select convert(date, DATEADD(hh, @shiftFudgeHours, [date]) ) as [date]
    ,[shift]
    ,avg(convert(float, parts)) as AvgParts
from Table1
group by convert(date, DATEADD(hh, @shiftFudgeHours, [date]) ), [shift]
order by convert(date, DATEADD(hh, @shiftFudgeHours, [date]) ), [shift]