我有一種情況,我在一個表中有多行,但可以將它們分配給一個通用名稱 id
| 姓名ID | ID | 開始日期 | 結束日期 |
|---|---|---|---|
| 10960 | 1 | 20 年 2 月 17 日 | 20 年 2 月 17 日 |
| 11210 | 2 | 20 年 2 月 17 日 | 20 年 2 月 18 日 |
| 10960 | 3 | 20 年 2 月 19 日 | 20 年 2 月 21 日 |
| 10960 | 4 | 20 年 2 月 21 日 | 20 年 3 月 2 日 |
| 11461 | 5 | 20 年 2 月 21 日 | 20 年 3 月 2 日 |
| 10960 | 6 | 01-MAR-20 | 20 年 3 月 6 日 |
| 10960 | 7 | 20 年 3 月 2 日 | 20 年 3 月 4 日 |
假設我想按 ID 7 和 name_id 10960 查詢我想選擇 ID 7、4、3 的行,因為這些是基于開始和結束日期的連接記錄。
uj5u.com熱心網友回復:
您可以使用遞回 CTE 來獲取所有相關行。
例如:
with
n (nameid, id, startdate, enddate) as (
select nameid, id, startdate, enddate from t where id = 7 -- starting row
union all
select t.nameid, t.id, t.startdate, t.enddate
from n
join t on t.nameid = n.nameid and t.enddate = n.startdate
)
select * from n;
結果:
NAMEID ID STARTDATE ENDDATE
------- --- ---------- ---------
10960 7 02-MAR-20 04-MAR-20
10960 4 21-FEB-20 02-MAR-20
10960 3 19-FEB-20 21-FEB-20
請參閱db<>fiddle中的示例。
uj5u.com熱心網友回復:
您可以CONNECT BY通過選擇起點并限制nameid要遍歷的 s 來回傳行。
SELECT *
FROM names
CONNECT BY enddate = PRIOR startdate AND nameid = PRIOR nameid
START WITH id = 7;
NAMEID ID STARTDATE ENDDATE
_________ _____ ____________ ____________
10960 7 02-MAR-20 04-MAR-20
10960 4 21-FEB-20 02-MAR-20
10960 3 19-FEB-20 21-FEB-20
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/441129.html
上一篇:在R中計算每個月的唯一值
下一篇:在T-SQL中比較日期
