特定の期間に働いた従業員と、その期間に働いた時間を見つけようとしています。私のクエリは、従業員 ID を pk として持ち、有効日と有効期限日を従業員の位置の時間測定として使用する従業員テーブルを、支払期間 ID 番号を pk として持ち、有効日と有効期限も使用する計時テーブルに結合する必要があります。
従業員テーブルの有効期限の問題は、従業員が現在雇用されている場合、日付が「12/31/9999」になることです。特定の年に働いた従業員と現在の従業員、および給与期間ごとに働いた時間を探しています。
ORステートメントを使用してwhereでこの条件を考慮すると、探している期間以降に働いた従業員である重複と、「12/31/9999」と有効なレコードの重複レコードが取得されます当時の社員。
これは私が使用しているクエリです:
SELECT
J.EMPL_ID
,J.DEPT
,J.UNIT
,J.LAST_NM
,J.FIRST_NM
,J.TITLE
,J.EFF_DT
,J.EXP_DT
,TM1.PPRD_ID
,TM1.EMPL_ID
,TM1.EXP_DT
,TM1.EFF_DT
--PULLING IN THE DAILY HRS WORKED
,(SELECT NVL(SUM(((to_number(SUBSTR(TI.DAY_1, 1
,INSTR(TI.DAY_1, ':', 1, 1)-1),99))*60)+
(TO_NUMBER(SUBSTR(TI.DAY_1
,INSTR(TI.DAY_1,':', -1, 1)+1),99))),0)
FROM PPRD_LINE TI
WHERE
TI.PPRD_ID=TM1.PPRD_ID
) "DAY1"
---AND THE REST OF THE DAYS FOR THE WORK PERIOD
FROM PPRD_LINE TM1
JOIN EMPL J ON TM1.EMPL_ID=J.EMPL_ID
WHERE
J.EMPL_ID='some id number' --for test purposes, will need to break down to depts-
AND
J.EFF_DT >=TO_DATE('1/1/2012','MM/DD/YYYY')
AND
(
J.EXP_DT<=TO_DATE('12/31/2012','MM/DD/YYYY')
OR
J.EXP_DT=TO_DATE('12/31/9999','MM/DD/YYYY') --I think the problem might be here???
)
GROUP BY
J.EMPL_ID
,J.DEPT
,J.UNIT
,J.LAST_NM
,J.FIRST_NM
,J.TITLE
,J.EFF_DT
,J.EXP_DT
,TM1.PPRD_ID
,TM1.EMPL_ID
,TM1.DOC_ID
,TM1.EXP_DT
,TM1.EFF_DT
ORDER BY
J.EFF_DT
,TM1.EFF_DT
,TM1.EXP_DT
単純なものが欠けていると確信していますが、この時点では、木を見て森を見ることができません。誰かが私を正しい方向に向けることができますか?
重複レコードの例:
2012 年の従業員 1 の場合:
Empl_ID Dept Unit Last First Title Eff Date Exp Date PPRD ID Empl_ID
00001 04 012 Babbage Charles Somejob 4/1/2012 10/15/2012 0407123 00001
Exp Date_1 Eff Date_1
4/15/2012 4/1/2012
この記録は 3 回繰り返され、2012 年の支払い期間を過ぎて 2013 年の現在の支払い期間になります。
時間と分を足し合わせて比較できるように時間を変換するために使用するサブクエリ。