我有一組機器。他們偶爾跑步和停止。這些運行時間自動記錄到postgres表中,時間戳starttime
和endtime
。重疊時間框架的SQL解決方案
我需要在6小時內找到每臺機器的運行時間。這是我到目前爲止:
SELECT machine, SUM(EXTRACT(EPOCH FROM (endtime - starttime)))
FROM table
WHERE
starttime >= '2016-01-27 12:00:00'
AND starttime <= '2016-01-27 18:00:00'
GROUP BY machine
ORDER BY machine
所以這個工程,我得到的機器在該時間段內運行時間秒。但它有一個缺陷 - 在12:00之前開始的任何運行時間都不計算在內。而且任何運行時間都是在我的時間框架內開始的,但不會在計算完時間之後纔會結束,而這些時間不應該在那裏。
是否有解決方案只提取時間範圍內的時間?我最初的想法是選擇所有行:
endtime >= '2016-01-27 12:00:00'
,不管怎樣,在內存中,在'2016-01-27 12:00:00'
設置所有的開始時間,其中開始時間比更早:
starttime <='2016-01-27 18:00:00'
和,再次在內存中而不更新數據庫,將所有結束時間設置爲'2016-01-27 18:00:00'
,其中結束時間晚於結束時間。然後運行提取/求和查詢。
但我正在努力如何實現這樣的事情。我有一個Java/Python的工作解決方案,這個數據被返回,但它們是迭代的,比我想要的要多。如果可能的話,我真的很想找到一個SQL解決方案。
編輯:爲了澄清,我需要計數該發生的時間框架內 ALL運行時間 - 如果一個運行的時間幀出現的時間幀應當被計數後運行僅部分之前開始。
只需啓動在ts1和ts2之間或在ts1和ts2之間結束? – jarlh
是不是每次都在這些時間之間? – Takarii
@Takarii否,時間範圍由用戶指定。 jarlh這會在開始和結束的時候計算短時間 - 我需要計算在此時間範圍內發生的所有運行時間,而不管它何時開始或停止。 –