我有下表:
ID | 描述 | 從日期 | 迄今為止 |
---|---|---|---|
ID_01 | 一個 | 08.2017 | 10.2020 |
ID_02 | 乙 | 02.2019 | 09.2029 |
ID_03 | C | 02.2014 | 02.2019 |
ID_04 | D | 04.2010 | 01.2019 |
ID_05 | D | 01.2019 | 09.2029 |
我需要 oracle sql 中的以下結果(從 01.2019 到 09.2022):
日期 | ID | 描述 |
---|---|---|
01.2019 | ID_01 | 一個 |
01.2019 | ID_03 | C |
01.2019 | ID_04 | D |
02.2019 | ID_01 | 一個 |
02.2019 | ID_02 | 乙 |
02.2019 | ID_03 | C |
02.2019 | ID_05 | D |
03.2019 | ID_01 | 一個 |
03.2019 | ID_02 | 乙 |
03.2019 | ID_05 | D |
因此,如果日期在 FromDate 和 ToDate 之間,則 ID 應該在串列中。如果具有相同 Desc 的兩個 ID(如 01.2019 的 ID_04 和 ID_05)有效,則應采用較低的 ID。
非常感謝您的幫助!
此致
uj5u.com熱心網友回復:
為您的日期范圍生成一個日歷,然后將其加入您的表格和GROUP BY
月份以及desc
(注意:DESC
是一個保留字,表示降序,不應用作識別符號):
WITH calendar (month) AS (
SELECT ADD_MONTHS(DATE '2019-01-01', LEVEL - 1)
FROM DUAL
CONNECT BY ADD_MONTHS(DATE '2019-01-01', LEVEL - 1) <= DATE '2019-09-01'
)
SELECT month,
MIN(id) AS id,
"DESC"
FROM calendar c
INNER JOIN table_name t
ON (c.month BETWEEN t.fromdate and t.todate)
GROUP BY month, "DESC"
ORDER BY month, id
其中,對于樣本資料:
CREATE TABLE table_name (ID, "DESC", FromDate, ToDate) AS
SELECT 'ID_01', 'A', DATE '2017-08-01', DATE '2020-10-01' FROM DUAL UNION ALL
SELECT 'ID_02', 'B', DATE '2019-02-01', DATE '2029-09-01' FROM DUAL UNION ALL
SELECT 'ID_03', 'C', DATE '2014-02-01', DATE '2019-02-01' FROM DUAL UNION ALL
SELECT 'ID_04', 'D', DATE '2010-04-01', DATE '2019-01-01' FROM DUAL UNION ALL
SELECT 'ID_05', 'D', DATE '2019-01-01', DATE '2019-09-01' FROM DUAL;
輸出:
月 | ID | DESC |
---|---|---|
2019-01-01 00:00:00 | ID_01 | 一個 |
2019-01-01 00:00:00 | ID_03 | C |
2019-01-01 00:00:00 | ID_04 | D |
2019-02-01 00:00:00 | ID_01 | 一個 |
2019-02-01 00:00:00 | ID_02 | 乙 |
2019-02-01 00:00:00 | ID_03 | C |
2019-02-01 00:00:00 | ID_05 | D |
2019-03-01 00:00:00 | ID_01 | 一個 |
2019-03-01 00:00:00 | ID_02 | 乙 |
2019-03-01 00:00:00 | ID_05 | D |
2019-04-01 00:00:00 | ID_01 | 一個 |
2019-04-01 00:00:00 | ID_02 | 乙 |
2019-04-01 00:00:00 | ID_05 | D |
2019-05-01 00:00:00 | ID_01 | 一個 |
2019-05-01 00:00:00 | ID_02 | 乙 |
2019-05-01 00:00:00 | ID_05 | D |
2019-06-01 00:00:00 | ID_01 | 一個 |
2019-06-01 00:00:00 | ID_02 | 乙 |
2019-06-01 00:00:00 | ID_05 | D |
2019-07-01 00:00:00 | ID_01 | 一個 |
2019-07-01 00:00:00 | ID_02 | 乙 |
2019-07-01 00:00:00 | ID_05 | D |
2019-08-01 00:00:00 | ID_01 | 一個 |
2019-08-01 00:00:00 | ID_02 | 乙 |
2019-08-01 00:00:00 | ID_05 | D |
2019-09-01 00:00:00 | ID_01 | 一個 |
2019-09-01 00:00:00 | ID_02 | 乙 |
2019-09-01 00:00:00 | ID_05 | D |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506880.html
下一篇:按列過濾行和分組