2011-11-30 24 views
3

我寧願在MySQL中完成此操作。在MySQL中獲取下一個時間戳

表:

tracker | user_id | timestamp | action 
1   1   1234  1 
2   2   1236  9 
3   1   1237  2 

我需要找到誰了1操作的所有用戶,並減去從他們的下一個動作的時間戳。意思是,用戶1的1234時間戳將從他的1237時間戳中減去。

這個想法是計算用戶在操作1中花費了多長時間直到他們去了別的地方。

獲取第一個時間戳很簡單。其中一個想法是記錄tracker的值,然後爲其中user_id再彈出一個子查詢,其中tracker高於第一個。在這個例子中:WHERE user_id = 1 AND tracker > 1

是否有更優化的解決方案?

回答

5

也許這可以幫助你。這將加入所有未來的行動

SELECT t1.*, 
     t2.`timestamp` - t1.`timestamp` 
FROM table t1 
     JOIN table t2 
     ON t1.user_id = t2.user_id 
      AND t2.tracker > t1.tracker 
WHERE t1.`action` = 1; 

您可能想要擴展以添加一個條件來獲取下一個只。

這是一些臨時查詢,不能準確判斷是否會起作用 這是假設爲該用戶僅選擇下一個。

SELECT t1.*, 
     t2.`timestamp` - t1.`timestamp` 
FROM table t1 
     JOIN table t2 
     ON t1.user_id = t2.user_id 
      AND t2.tracker = (SELECT Min(tracker) 
           FROM table t3 
           WHERE t3.user_id = t1.user_id 
            AND t3.tracker > t1.tracker) 
WHERE t1.`action` = 1; 
+0

我可以+2這個。我正在寫一個更加醜陋的解決方案,並停止了一半,因爲這更優雅。 –

+0

不要擔心本·李,我給了我的+1以及; D – Qqwy

+0

這很完美!謝謝。 – djdy