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 日 AM シフトのデータ:

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

たとえば、それをC Shiftに結び付ける方法がわかりません。

4

2 に答える 2

2

以下はシフトの表をクランクアウトします。何をしたいのかは明確ではありませんが、ここに示す計算のいくつかを使用して、イベントの日付/時刻からのシフトをリバースエンジニアリングして決定できるはずです。

編集case2/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 に答える