2016-11-15 60 views
1

我想將不超過15分鐘的行分組。我喜歡看到用戶何時登錄並進行「會話」。時間差不超過15分鐘的組行

Time 
2016-11-15 11:37:34 
2016-11-15 11:35:04 
2016-11-15 11:21:11 
2016-11-15 09:37:22 
2016-11-15 09:27:01 
2016-11-14 21:37:59 
2016-11-14 21:33:35 
2016-11-14 21:31:14 

結果:

Start     End 
2016-11-15 11:21:11 2016-11-15 11:37:34 
2016-11-15 09:27:01 2016-11-15 09:37:22 
2016-11-14 21:31:14 2016-11-14 21:37:59 

這是我當前的查詢:

SELECT 
ROUND(UNIX_TIMESTAMP(Time)/900) as Session 
FROM workouts 
GROUP BY Session 
ORDER BY Session DESC 

但它只組是在15分鐘之間的所有行。

+0

我不跑的子查詢(一)什麼是15分鐘的時間間隔。我喜歡的是如果最後一行和當前行之間的差異不大於15分鐘。我確實更新了這個問題 – user2673664

+0

所有的ID都一樣嗎?如果是這樣,爲什麼要打擾那個專欄? – Strawberry

+0

@Strawberry我已刪除id列。你有什麼想法如何解決這個問題? – user2673664

回答

1

你一個GROUP BY在所有後不是......

SELECT x.* 
    FROM my_table x 
    LEFT 
    JOIN my_table y ON y.dt > x.dt 
    AND y.dt <= x.dt + INTERVAL 15 MINUTE 
WHERE y.dt IS NULL; 

編輯:

要回答這個問題修正,你可能會考慮這些方針的東西。它看起來要複雜得多,但事實上,它可能執行更快...

SELECT MIN(dt) start 
    , MAX(dt) end 
    FROM 
    (SELECT dt 
      , CASE WHEN @prev > dt - INTERVAL 15 MINUTE THEN @i:[email protected] ELSE @i:[email protected]+1 END rank 
      , @prev:=dt 
     FROM my_table 
      , (SELECT @i:=0,@prev:=null) vars 
     ORDER 
      BY dt 
    ) a 
GROUP 
    BY rank; 

要看看它是如何工作的,它可能有助於自身

+0

甜!是否有辦法獲得第一次會議? – user2673664

+0

我想用一個聯盟或其他聯盟 - 但我建議你編輯你的問題,使其更清晰你以後。 – Strawberry

+0

我剛剛更新了這個問題:) – user2673664