2014-01-19 81 views
0

我有一個postgresql 9.1表,其中有兩個時間戳記錄可能重疊的時間段。例如:使用postgresql計算跨多個記錄的兩個時間戳之間的總分鐘數

ID Start      End 
1 2014-01-19 21:14:59+00 2014-01-19 21:30:00+00 
1 2014-01-19 21:16:29+00 2014-01-19 21:31:30+00 
2 2014-01-19 21:19:29+00 2014-01-19 21:40:30+00 
2 2014-01-19 21:29:59+00 2014-01-19 21:45:00+00 

我需要把所有的分鐘和每個ID在這些行確保時間不被重複計算,從而使輸出將是:

ID Hour  Total Minutes 
1 21  n 
2 21  n 

讚賞任何幫助。

+0

請顯示您想要的輸出示例。 –

+0

這對sql/postgresql來說太難了嗎? – Steve

回答

0

每組只有兩行,您可以使用蠻力進行計算。在兩個時期內總是加起來。然後減去重疊(如果有的話):

select id, 
     (sum(extract(epoch from end - start)) - 
     (case when max(start) < min(end) 
       then extract(epoch from max(start) - min(end)) 
       else 0 
     end) 
     )/60 
from timeperiods tp 
group by id; 

如果您有多個行,則解決方案更難。如果這是你的問題,那麼發佈另一個問題。

+0

嗨戈登。每個ID和許多ID都有很多行。當問題主題陳述「跨多個記錄」時,我應該如何重新說明問題? – Steve

+0

@Steve。 。 。提供樣本數據並說出諸如「開始和結束」時間戳之類的內容。我將「兩個時間戳」解釋爲兩行。 –

+0

問題重新格式化並提交 - 謝謝 – Steve

相關問題