自分のプロジェクトを管理するための簡単な時間追跡プログラムを書いています。私はレポート コードをデータベースに保存するのが大好きなので、請求書やタイムシートなどを生成するいくつかの sproc を作成しようとしています。
クロック アクション、つまり「パンチ イン」と「パンチ アウト」を含むテーブルがあります。また、このアクションを実行したユーザー、アクションに関連付けられたプロジェクト、および現在の日付/時刻も含まれています。
このテーブルから選択して、特定の時間/プロジェクト/およびユーザーの出勤を取得できますが、各出勤が 2 行から合計時間を含む 1 行に変換されるように集計したいと考えています。
たとえば、出力例を次に示します。
ClockActionID ActionType DateTime
-------------------- ---------- -----------------------
17 1 2008-11-08 18:33:56.000
18 2 2008-11-08 18:33:59.587
19 1 2008-11-08 18:34:01.023
20 2 2008-11-08 18:34:02.037
21 1 2008-11-08 18:45:06.317
22 2 2008-11-08 18:46:14.597
23 1 2008-11-08 18:46:16.283
24 2 2008-11-08 18:46:17.173
25 1 2008-11-08 18:50:37.830
26 2 2008-11-08 18:50:39.737
27 1 2008-11-08 18:50:40.547
(11 row(s) affected)
ActionType 1 は「ClockIn」、ActionType 2 は「ClockOut」です。また、簡潔にするために、ユーザー、プロジェクト、および説明の列を削除しました。
純粋な SQL で、次のような結果セットを生成する必要があります。
Description | Total Time
各クロックイン/クロックアウト ペア。
これは実際にはかなり単純だと思いますが、どの方法でアプローチすればよいかわかりません。
編集: ユーザーは複数のプロジェクトに同時にクロックインできますが、最初に結果セットを 1 つのプロジェクトに絞り込むことで、ここでのロジックに違いはありません。