次の順序でクロック エントリを格納するテーブルがあります。
UID Clock Status
=== ===== ======
R01 2013-01-01 17:00:00 Clockin
R01 2013-01-01 17:10:00 Clockin
R01 2013-01-01 23:45:00 Clockin
私の現在の解決策は、最小/最大日付をケースと左結合で使用して、次の順序でエントリを配置することです
UID Date ClockIn ClockOut
=== ==== ======= ========
R01 2013-01-01 17:00:00 23:45:00
クロック エントリが午前 0 時を過ぎた場合、どのように対処すればよいですか。つまり、
UID Clock Status
=== ===== ======
R01 2013-01-01 17:00:00 Clockin
R01 2013-01-02 00:45:00 Clockin
上記のように、以下のような 2 つのエントリが生成され、従業員の勤務時間は 7.45 時間ゼロになります。
UID Date ClockIn ClockOut
=== ==== ======= ========
R01 2013-01-01 2013-01-01 17:00:00 2013-01-01 17:00:00
R01 2013-01-02 2013-01-02 00:45:00 2013-01-02 00:45:00
前もって感謝します。
これは、SQL 2008R2 で使用されるストアド プロシージャのコードです。
SELECT A.Device,A.DID, A.Name, A.ClockDate,Clockin ,ClockOut
FROM
(
SELECT Device,DID,Name, CONVERT(DATE, DeviceClock) 'ClockDate',
min(case when clock=Clock and Status ='Clock In' OR status='Clock Out' OR status='Access In' then clock end) 'CLock In'
FROM TABLE
group by Device,DID,Name, CONVERT(DATE, DeviceClock)
) as A
LEFT JOIN
(
SELECT Device,DID,Name, CONVERT(DATE, DeviceClock) 'ClockDate',
max(case when clock=Clock and Status ='Clock in' or status='Clock Out' OR status='Access In' then Clock end) 'Clock Out'
FROM TABLE
group by Device,DID,Name, CONVERT(DATE, DeviceClock)
) as B
ON A.DID = B.DID AND A.ClockDate = B.ClockDate