我有一个看起来像这样的表:
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
答案 0 :(得分:0)
我假设班次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]