次のように、2 つのテーブルがあります。
master
---------
empcode INT PRIMARY KEY
name VARCHAR
dept VARCHAR
emp_tx
----------
empcode INT references MASTER(empcode)
s_date DATETIME
このemp_tx
テーブルは、従業員の「入」および「出」取引を記録します。この列s_date
には、「in」または「out」イベントが発生した時刻が (DATETIME 値として) 格納されます。トランザクションは、オフィス地域から記録されます (指紋生体認証システムを介して)。
emp_tX テーブルのデータ例:
empcode s_datetime
------- ------------------
1110 2012-12-12 09:31:42 (employee in time to the office)
1110 2012-12-12 13:34:17 (employee out time for lunch)
1110 2012-12-12 14:00:17 (employee in time after lunch)
1110 2012-12-12 18:00:12 (employee out time after working hours)
1112
etc.
注:
従業員が特定の日にオフィスを欠席した場合、emp_tx
その日付の行はトランザクション テーブルに挿入されません。特定の日付に従業員が不在の場合は、その従業員とその日付の「行方不明」行によって示されます。
従業員不在レポートを作成するために、従業員が欠勤した日付を返す SQL クエリを取得するのを手伝ってくれる人はいますか?
クエリへの入力は、日付の範囲を指定する「開始日」と「終了日」の 2 つの DATE 値になります。クエリは、「開始日」と「終了日」の間の任意の日付のEMP_TX
テーブルに行が見つからない場合、「不在」のすべての発生 (または、発生しないというよりむしろ発生しない) を返す必要があります。empcode
期待される出力:
「開始」日付として「2012-12-12」を入力し、「終了」日付として「2012-12-20」を入力すると、クエリは次のような行を返す必要があります。
Empcode EmpName Department AbsentDate TotalNoofAbsent days
------- ------- ---------- ----------- --------------------
1110 ABC Accounts 2012-12-12
1110 ABC Accounts 2012-12-14 2
1112 xyz Software 2012-12-19
1112 xyz Software 2012-12-17 2
このクエリを試してみましたが、必要な行が返されていないと確信しています:
select tx.date from Emp_TX as tx where Date(S_Date) not between '2012-12-23' and '2012-12-30'
ありがとう。