1

我什至不确定从哪里开始解决这个问题,我需要从我们的 MS SQL 2012 Db 中查询生产数据,该数据库具有基于它记录的班次的日期时间戳,棘手的部分是我们运行 4 个 12 小时班次以 2 开、2 关、3 开、2 关的模式,即这是 2013 年 1 月的前 3 周:

S   M   T   W   T   F   S
        1   2   3   4   5
        C/D A/B A/B C/D C/D

6   7   8   9   10  11  12
C/D A/B A/B C/D C/D A/B A/B

13  14  15  16  17  18  19
A/B C/D C/D A/B A/B C/D C/D

A&C 是早班 7:00-19:00,B&D 是夜班 19:00-7:00 2013 年 1 月 1 日上午班次的数据:

select *
from Line05
where L05Time BETWEEN '01/01/2013 07:00' AND '01/01/2013 19:00'

例如,但我不确定如何将其与 C Shift 联系起来。

4

2 回答 2

2

下面列出了一个班次表。目前尚不清楚您想要做什么,但您应该能够使用此处显示的一些计算来逆向工程确定事件日期/时间的偏移。

编辑:更正case以处理 2/2/3/2 模式。

; with Samples as (
  -- Start at the beginning of 2013.
  select Cast( '01-01-2013 00:00' as DateTime ) as Sample
  union all
  -- Add hours up to the desired end date.
  select DateAdd( hour, 1, Sample )
    from Samples
    where Sample <= '2013-01-30'
  ),
  ExtendedSamples as (
  -- Calculate the number of days since the beginning of the first shift on 1/1/2013.
  select Sample, DateDiff( hour, '01-01-2013 07:00', Sample ) / 24 as Days
    from Samples ),
  Shifts as (
  -- Calculate the shifts for each day.
  select *,
    case when ( Days + 1 ) % 9 in ( 0, 1, 4, 5 ) then 'C/D' else 'A/B' end as Shifts
    from ExtendedSamples )
  select *,
    case when DatePart( hour, Sample ) between 7 and 18 then Substring( Shifts, 1, 1 ) else Substring( Shifts, 3, 1 ) end as Shift
    from Shifts
    option ( maxrecursion 0 )
于 2013-01-07T18:04:16.390 回答
1

我敢肯定,当有假期或停工时,它会变得更加狡猾。你像程序员一样思考,你在想有一种算法可以确定你的答案。相反,如果建议您像数据专家一样思考。在某个地方应该有一个信息来源,可以提供您所寻求的答案。询问制定时间表的人是否知道。应该有一个表格告诉你哪些班次分配给了哪些时间段。使用它包含的数据来获得答案。

于 2013-01-07T17:19:22.253 回答