簡體   English   中英

Select 只有那些沒有被另一行完全包含的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM