ID JOB_ID RATE START_DT END_DT
43 41 11 06/06/2022
42 42 12 06/06/2022
41 43 10 06/06/2022 06/17/2022
62 43 15 06/17/2022 06/21/2022
63 43 18.5 06/21/2022 06/22/2022
65 43 19.5 06/22/2022
44 45 15 06/06/2022
45 46 16 06/06/2022
46 47 19 06/06/2022
47 48 20 06/06/2022
48 49 25 06/06/2022
我正在嘗試獲得每項作業的活躍率。如果一個作業的結束日期為空,那么這僅意味著這是該作業的活動率,因為沒有結束日期。對于 JOB_ID = 43,可以添加未來的結束日期。對于此作業,您可以看到有 4 行指定了一些未來的費率。如果今天是 6 月 11 日,則應回傳 ID = 41 的行,因為它是當前活躍的匯率。為了得到這一行,我會運行一個查詢,檢查是否sysdate between start_dt and end_dt. 這只會回傳這一行,但我想在一個查詢中回傳所有作業及其在查詢運行之日的當前費率。如您所見,作業 43 也有未來的費率,沒有結束日期。我不確定如何查詢這個。我在日期欄位上嘗試了不同的聚合函陣列合,例如 max ,但我沒有成功。
我想要實作的輸出是這樣的:
ID JOB_ID RATE START_DT END_DT
43 41 11 06/06/2022
42 42 12 06/06/2022
41 43 10 06/06/2022 06/17/2022
44 45 15 06/06/2022
45 46 16 06/06/2022
46 47 19 06/06/2022
47 48 20 06/06/2022
48 49 25 06/06/2022
假設我們有一臺時間機器,到明年,輸出需要如下所示:
ID JOB_ID RATE START_DT END_DT
43 41 11 06/06/2022
42 42 12 06/06/2022
65 43 19.5 06/22/2022
44 45 15 06/06/2022
45 46 16 06/06/2022
46 47 19 06/06/2022
47 48 20 06/06/2022
48 49 25 06/06/2022
uj5u.com熱心網友回復:
假設 and 的資料型別,您START_DT可以像比較任何其他資料型別一樣比較它們。例如,使用END_DTDATE
SELECT *
FROM SOME_TABLE
WHERE SYSDATE >= START_DT AND
(SYSDATE <= END_DT OR
END_DT IS NULL)
或同等的
SELECT *
FROM SOME_TABLE
WHERE SYSDATE BETWEEN START_DT
AND NVL(END_DT, DATE '9999-12-31')
即使日期存盤為字串,您仍然可以使用幾乎相同的查詢:
SELECT *
FROM SOME_TABLE_WITH_CHAR_DATES
WHERE SYSDATE BETWEEN TO_DATE(START_DT, 'MM/DD/YYYY')
AND NVL(TO_DATE(END_DT, 'MM/DD/YYYY'), DATE '9999-12-31')
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/489458.html
