我們有這樣的一個表:如何檢測MySQL DATETIME列中的連續小時數?
DESCRIBE time_slots; id int(11) user_id int(11) start_time datetime
的start_time
領域始終是一個小時的增量(例如2013-09-04 16:00:00
)
我們的數據科學家想要查詢該表中標識連續start_time
記錄每user_id
方式這樣,她可以創建一個派生表,看起來像這樣:
id int(11) user_id int(11) start_time datetime end_time datetime
例如,給出這樣的數據:
user_id: 5, start_time: 2013-09-04 16:00:00 user_id: 5, start_time: 2013-09-04 17:00:00 user_id: 5, start_time: 2013-09-04 18:00:00 user_id: 6, start_time: 2013-09-04 16:00:00 user_id: 6, start_time: 2013-09-04 17:00:00 user_id: 6, start_time: 2013-09-04 18:00:00 user_id: 6, start_time: 2013-09-04 20:00:00 user_id: 6, start_time: 2013-09-04 21:00:00 user_id: 6, start_time: 2013-09-04 22:00:00
...我們可以得出這樣的輸出:
user_id: 5, start_time: 2013-09-04 16:00:00, end_time: 2013-09-04 18:00:00 user_id: 6, start_time: 2013-09-04 16:00:00, end_time: 2013-09-04 18:00:00 user_id: 6, start_time: 2013-09-04 20:00:00, end_time: 2013-09-04 22:00:00
有可能是每天給定用戶,這些開始/結束「塊」(但他們不會重疊)的倍數。
在我進入Plan B(設置非規範化數據倉庫)之前,有什麼想法可以在SQL中做到這一點?
MySQL中不存在窗口函數。 –
使用RANK和RANK-1或user_id進行自連接,starttime - 1小時作爲密鑰會給你同樣的能力 – mhoglan
btw,InfiniDB是一個MySQL兼容數據庫(開源GPLv2),具有在標準MySQL上構建的窗口函數功能。 – mhoglan