2016-04-27 100 views
0

我想寫一個廣泛的查詢,將完成以下任務;MySQL日期差異查詢

  • 從「time_stamps」數據庫中選擇字段「time_stamp」和「status」,並按「time_stamp」ASC對它們進行排序。
  • 在返回的字段中,對於每對時間戳(1入1出),我需要以小時爲單位獲得差異。

這是我到目前爲止在查詢中的內容。

SELECT time_stamp AS 'time', status AS 'status' FROM time_stamps WHERE user_id = '55' ORDER BY time 

然後我有這個查詢從兩個日期得到的差異,以小時計。

SELECT TIMESTAMPDIFF(SECOND, '2016-04-26 07:01:26', '2016-04-26 15:07:55')/3600.0 

理想情況下,我想查詢返回看起來像這樣的數據;

time_stamp   status difference 
2016-04-18 06:57:04  1 
2016-04-18 11:19:49  0 8.11 
2016-04-18 11:41:01  1 
2016-04-18 15:21:02  0 3.67 
2016-04-19 07:06:16  1 
2016-04-19 10:58:34  0 3.87 
2016-04-19 11:18:50  1 
2016-04-19 15:16:00  0 3.95 
2016-04-20 06:58:30  1 
2016-04-20 12:46:33  0 5.80 

我在想,我可能不得不編寫一個存儲過程或類似的東西來實現這一點,但我並不完全確定。有人能指引我走向何方?我不想找人爲我寫這整個查詢,只是向正確的方向推動。謝謝!

回答

0
SELECT time_stamp, status, 
     TIMESTAMPDIFF(
       SECOND, 
       (
       SELECT ti.time_stamp 
       FROM time_stamps ti 
       WHERE ti.user_id = t.user_id 
         AND ti.time_stamp <= t.time_stamp 
         AND t.status = 0 
         AND ti.status = 1 
       ORDER BY 
         ti.user_id DESC, ti.time_stamp DESC 
       LIMIT 1 
       ), 
       time_stamp 
       ) 
FROM time_stamps t 
WHERE user_id = :myuserid 

這個創建於(user_id, time_stamp)複合指數快速地工作。

+0

隨着一些修補程序,我讓你的代碼完美工作。感謝您的幫助Quassnoi! – Kronos1

0

在正確的方向只是微調,因爲你問:

如何

SELECT @previous, @previous := `time_stamp`, `status` 
FROM time_stamps 
ORDER BY `time_stamp`; 

和工作從。

請注意,列順序在這種情況下很重要。如果你在檢索之前先分配它,它不會(很明顯可能)工作。

概念證明:http://sqlfiddle.com/#!9/4e17b5/2