2014-03-07 54 views
0

這是一個非常簡單的問題,我覺得答案應該很明顯,但是我沒有找到解決方案已經兩個小時了。在SQL中對每個組的最小時間進行分組

我願意轉換存儲在PostgreSQL中的離散數據流。它們最初被存儲爲高頻採樣。所以對於單個時間戳,我可能有多個相似的值。我想做一個可變長度的採樣,所以類似的值只能在序列中存儲一次。這聽起來像是一個簡單的計數(*)組,但由於我想保留序列的最低時間戳,因此無法如此處理。

t1 2  
t2 2  t1 2 3 
t3 2 -> t4 3 1 
t4 3  t5 2 1 
t5 2 

我想要一個儘可能快的請求。任何幫助將不勝感激。

+0

可能重複的[每個GROUP BY組中選擇第一行?](http://stackoverflow.com/questions/3800551/select-first-row在每個組中) –

+0

不,因爲值可以被訪問不止一次,我需要爲每次訪問(如t1和t5)單獨的時間戳...這個問題的聲音實際上非常不適合SQL查詢 –

+0

這應該是一個缺口和孤島問題。參見[這個標籤中的問題](http://stackoverflow.com/questions/tagged/gaps-and-islands)。 –

回答

0

我找到了解決這個問題一半的方法。

  1. 計算增量表,dn = tn - tn-1。這是不平凡的,但可行
  2. 採取從第1表中的所有時間,這是不爲0的增量表中

我會懷念這裏的最終列,不過,這將提高讀取性能。現在我需要幫助來做一個優化的請求:

t1 2  t1 2 3 
t4 3 -> t4 3 1 
t5 2  t5 2 1 
+0

'dn = tn - tn-1'可以使用'lag()'函數輕鬆完成 –

+0

您需要展示您的工作,以便將來的讀者能夠受益。此外,這應該是對你的問題的一個修改,而不是一個答案。 (回答你自己的問題很好,但請把它作爲最終的解決方案,而不是進行中的工作) –

相關問題