簡體   English   中英

SQL:如何找到日期時間范圍為30分鍾的“ Created_at”列中的數據集記錄?

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

這種結構使您看起來好像在查詢兩個不同的表t1t2 ,即使它們是相同的數據。

我想你的比較會像這樣

  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.

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