[英]Select only those values that are not contained by another line entirely
我有一張桌子
用戶身份 | 事物編號 | 開始 | 結尾 |
---|---|---|---|
1個 | 1個 | 2022-01-01 | 2022-01-31 |
1個 | 2個 | 2022-01-05 | 2022-01-10 |
1個 | 3個 | 2022-02-01 | 2022-02-05 |
2個 | 4個 | 2022-01-01 | 2022-01-01 |
2個 | 5個 | 2022-01-02 | 2022-01-04 |
我想要 select 所有東西,但跳過那些完全包含在同一用戶的另一件事中的東西。 所以結果應該是
事物編號 |
---|
1個 |
3個 |
4個 |
5個 |
我假設我需要使用 window 函數和條件,但不知道如何有效地查詢它。
您可以使用NOT EXISTS
。
對於您的示例數據,它會很簡單:
SELECT t1.*
FROM tablename t1
WHERE NOT EXISTS (
SELECT *
FROM tablename t2
WHERE t2.user_id = t1.user_id
AND t2.thing_id <> t1.thing_id
AND t1.start > t2.start AND t1.end < t2.end
);
請參閱演示。
根據您的要求,您可以將日期條件更改為:
AND t1.start >= t2.start AND t1.end =< t2.end
或者:
AND ((t1.start >= t2.start AND t1.end < t2.end) OR (t1.start > t2.start AND t1.end <= t2.end))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.