喜んで複雑な質問、ありがとう。私のクエリで扱うもの:
- 時間単位で正確に測定されない出席者。計算の終了時に秒数が合計され、3600で除算されます。
- エンド(感謝strawberry)
- 開始している現在の月の出席(オペレーション「1」とのエントリがある)が、「該当する操作はありません(まだ終わっていないのいずれかで月の境界をまたぐ出席2 ")。
私はテストのために、以下のデータを使用:
INSERT INTO Attendance(UserId, Operation, CreatedDate) VALUES
(4, 1, '2016-01-01 15:00:00'),
(4, 2, '2016-01-01 19:00:00'),
(4, 1, '2016-01-31 23:00:00'),
(4, 2, '2016-02-01 01:00:00'),
(4, 1, '2016-02-20 23:18:59'),
(4, 2, '2016-02-20 23:19:50'),
(4, 1, '2016-02-20 23:20:28'),
(4, 2, '2016-02-20 23:20:31'),
(4, 1, '2016-02-29 23:00:00'),
(4, 2, '2016-03-01 01:00:00'),
(4, 1, '2016-03-02 15:00:00'),
(4, 2, '2016-03-02 18:00:00'),
(4, 1, '2016-03-22 10:00:00');
クエリは、特定の月のすべてのユーザーの時間を選択します。 1つのクエリで1ヶ月以上の結果を選択すると、出席が月境界にまたがる可能性があるため、さらに複雑になります。必要に応じて、SQLで4つの日付を適切に調整して繰り返し実行します。
最も内側のクエリは、すべてのユーザーのすべての到着時刻と対応する出発時刻を選択します。外側のクエリは、現在の月にそれらを制限し、2回の間の差を計算し、それらをユーザーによって合計します。
従業員が31日にチェックインして1日目にチェックアウトするとどうなりますか? – Strawberry
@Strawberry私はそれを忘れてしまった。同じアイデアかより良いスキーマを提案できますか? –
ちょうど質問に答えてください。またはしないでください。それはあなた次第です。 – Strawberry