2015-01-07 30 views
-1

我有一個表將所有「簽入」記錄到系統中。我想統計當天用戶的所有「簽到」,但有一個問題,即有時用戶在一分鐘內錯誤地簽入兩次或三次。所以,我只是想從至少兩分鐘MySql計數條目沒有重複日期時間

差距來計算所有條目

我現在命令看起來像:

"SELECT event_datetime, LEFT(tag_uid,8) AS tag_uid, count(*) as anzahl FROM events WHERE date(event_datetime) = curdate() GROUP BY tag_uid" 

所以我只想計算,如果event_datetime之間的差距是至少兩分鐘按tag_uid分組(用戶)

任何想法如何解決?

+0

如果您願意,請考慮遵循以下簡單的兩步操作步驟:1.如果您尚未這樣做,請提供適當的DDL(和/或sqlfiddle),以便我們可以更輕鬆地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry

回答

0

首先,您需要計算每個tag_uid的間隔,然後您可以根據需要設置條件。要計算間隔,您需要使用嵌套的select命令,它將使用min和max命令獲得「第一次checkIn」和「last checkIn」。使用「timediff」來計算時差。

注意:我還沒有嘗試過代碼,我也添加了select命令,以便您可以查看值以查找錯誤。

代碼將類似於此:

SELECT 
    tbl_outer_events.event_datetime, 
    LEFT(tbl_outer_events.tag_uid,8) AS tag_uid, 
    count(tbl_outer_events.tag_uid) as anzahl, 
    (select min(event_datetime) from tbl_events as T1 where ((t1.tag_uid = tbl_outer_events.tag_uid)) and (date(t1.event_datetime) = curdate()))as `first_checkin`, 
    (select max(event_datetime) from tbl_events as T1 where ((t1.tag_uid = tbl_outer_events.tag_uid)) and (date(t1.event_datetime) = curdate()))as `last_checkin`, 
    (select TIMEDIFF(max(event_datetime), min(event_datetime)) from tbl_events as T1 where ((t1.tag_uid = tbl_outer_events.tag_uid)) and (date(t1.event_datetime) = curdate())) as `interval` 
FROM events as tbl_outer_events 
WHERE ((date(event_datetime) = curdate()) 
     AND (select TIMEDIFF(max(event_datetime), min(event_datetime)) from tbl_events as T1 where ((t1.tag_uid = tbl_outer_events.tag_uid)) and (date(t1.event_datetime) = curdate())) >= '00:20:00') 
GROUP BY tag_uid; 

PS:請向我們提供的樣本數據或期望的結果。它會幫助我們和你理解這個問題。