[英]SQL: How can i find the records of a dataset that exist in a datetime range of 30 minutes for a column 'Created_at'?
SELECT t1.depar_date, t1.return_date, t1.orig_air, t1.dest_air, t1.num_pass, count(t1.id) as count_of, 'TRUE' as Hit_Cache
FROM MY_TEST t1
WHERE t1.created_at BETWEEN t1.created_at AND dateadd(minute, 30, t1.created_at) --t1.created_at > dateadd(DAY, 1, t1.created_at)
GROUP BY t1.depar_date, t1.return_date, t1.orig_air, t1.dest_air, t1.num_pass
HAVING count(t1.id) > 1;
DATEADD
無法識別,並引發錯誤。
大寫MINUTE或以小寫形式使用mm:
SELECT t1.depar_date, t1.return_date, t1.orig_air, t1.dest_air, t1.num_pass, count(t1.id) as count_of, 'TRUE' as Hit_Cache
FROM MY_TEST t1
WHERE t1.created_at BETWEEN t1.created_at AND dateadd(MINUTE, 30, t1.created_at) --t1.created_at > dateadd(DAY, 1, t1.created_at)
GROUP BY t1.depar_date, t1.return_date, t1.orig_air, t1.dest_air, t1.num_pass
HAVING count(t1.id) > 1;
因為您的查詢針對DATEADD()
所以我想您正在使用MySQL。
在我看來,您想知道表中每個記錄的半小時內還有多少其他記錄。
因為要比較記錄與記錄,所以需要自聯接操作。 具體來說,您想要這樣的東西
FROM MY_TEST t1
JOIN MY_TEST t2 ON something.
這種結構使您看起來好像在查詢兩個不同的表t1
和t2
,即使它們是相同的數據。
我想你的比較會像這樣
FROM MY_TEST t1
JOIN MY_TEST t2
ON t2.created_at BETWEEN t1.created_at AND t1.created_at + INTERVAL 30 MINUTE
該聯接操作的結果包括表中與ON
條件匹配的所有成對的行對的所有組合。 然后,您可以從那對成對的行中進行選擇和總結。
您的其余查詢看起來與您所遇到的問題非常相似。
SELECT t1.depar_date, t1.return_date, t1.orig_air,
t1.dest_air, t1.num_pass, count(t1.id) as count_of,
'TRUE' as Hit_Cache
FROM MY_TEST t1
JOIN MY_TEST t2
ON t2.created_at BETWEEN t1.created_at AND t1.created_at + INTERVAL 30 MINUTE
GROUP BY t1.depar_date, t1.return_date, t1.orig_air, t1.dest_air, t1.num_pass
HAVING count(t1.id) > 1;
也許我猜錯了MySQL。 在SQL Server中,您的ON子句將如下所示。
ON t2.created_at BETWEEN t1.created_at AND DATEADD(MINUTE, 30, t1.created_at)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.