2017-02-15 52 views
2

嗨所以我有這樣一個查詢,以便MySQL查詢與時間公差

SELECT 
meteor_events.event_id AS event_id, 
meteor_events.user_ID AS user_ID, 
meteor_events.date AS date, 
meteor_events.Time 
from `meteor_events` 

有可能是給定日期的多個事件即

37775 2 2017-01-01 00:01:23 
33500 1 2017-01-01 01:07:56 
37776 2 2017-01-01 01:08:45 
47827 3 2017-01-01 01:08:30 
37777 2 2017-01-03 01:09:44 

我想更新查詢,以便它帶回一個記錄,其中

1 - 日期匹配 和 2 - 時間匹配但有30秒的公差範圍

所以在這個例子中,它將返回

37776 2 2017-01-01 01:08:45 
47827 3 2017-01-01 01:08:30 

我只是不知道是開始?

John B

+0

見http://meta.stackoverflow.com/questions/333952/why - 我應該提供一個mcve爲什麼似乎對我來說是一個非常簡單的sql查詢 – Strawberry

回答

1

如果將數據和時間列合併爲一個,可能會更容易。此外,還要避免使用SQL關鍵字作爲列名

,你需要一個自聯接的任務:

SELECT a.event_id, a.user_ID, a.`date`, a.`Time` 
FROM meteor_events AS a 
JOIN meteor_events AS b 
WHERE a.event_id != b.event_id 
AND a.`date` = b.`date` 
AND time_to_sec(a.`Time`) - time_to_sec(b.`Time`) BETWEEN -30 AND 30; 

enter image description here

+0

SIDU工作得很好,它很慢,所以我添加了一個索引日期和時間列,而不是速度不是問題 - 它需要稍微更新。如果用戶3例如在+或 - 30秒內具有2個匹配的日期和2次那些結果也被返回,則每個用戶事件是唯一的,並且用戶3可以具有幾個只隔幾秒的事件,但它們是獨特的事件,I只希望查詢從其他用戶取回匹配事件 - 希望這有意義嗎? –

+0

在這種情況下,添加:AND a.user_ID!= b.user_ID – SIDU

+0

「還避免使用SQL關鍵字作爲列名」 - 現在告訴我爲什麼?我有「'」字符。而且這不會讓我的查詢時間過長 – ad4s