我正在嘗試撰寫一個查詢來從如下所示的表中檢索 ID:
| ID | 型別 | CREATED_TIME |
|---|---|---|
| 1234 | 開始 | 2021-11-01 21:43:48.0000000 |
| 1234 | 開始 | 2021-11-01 21:44:40.0000000 |
| 1234 | 結尾 | 2021-11-04 15:27:50.0000000 |
| 4567 | 開始 | 2021-09-02 20:12:40.0000000 |
| 4567 | 開始 | 2021-09-02 23:01:11.0000000 |
理想情況下,我希望查詢回傳具有2 個或更多相同型別記錄且創建時間間隔小于 3 分鐘的 ID 。因此它應該回傳 ID 1234,因為它有 2 條型別 = start 和創建時間相隔不到 1 分鐘的記錄。它不應回傳 4567,因為 createdtime 相隔 3 小時。
uj5u.com熱心網友回復:
假設你的表被稱為 DATA 這應該作業:
SELECT DISTINCT t1.ID
FROM
DATA t1 JOIN
DATA t2 ON t1.ID = t2.ID
AND t1.TYPE = t2.TYPE
AND t1.CREATED_TIME <> t2.CREATED_TIME
AND (ABS(DATEDIFF(MINUTE, t1.CREATED_TIME, t2.CREATED_TIME)) < 3)
uj5u.com熱心網友回復:
自連接效率低下。您應該為此使用視窗函式
SELECT ID
FROM (
SELECT *,
PrevVal = LAG(CREATED_TIME, 1, '19000101') OVER (PARTITION BY ID, Type ORDER BY CREATED_TIME)
FROM YourTable t
) t
WHERE DATEADD(minute, 3, t.PrevVal) >= t.CREATED_TIME
GROUP BY ID;
資料庫<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/355484.html
標籤:sql sql-server 数据库 约会时间
