2016-08-15 48 views
1

我正在尋找替代SQL代碼這個sql算法有更好的性能嗎?

我的表有4列:Id, Zip code, timestamp and user value.

行範例:2299898;"40";"2011-03-28 00:45:00+02";1.9

我想要得到的結果爲一天爲每個郵政編碼的時間等於或在時間戳之前。顯然,每條線的用戶數據。

我到目前爲止查詢:

SELECT DISTINCT 
    FIRST_VALUE(timestamp) OVER (
     PARTITION BY zipcode, DATE(timestamp) 
     ORDER BY timestamp DESC 
    ) AS timestamp, 
    zipcode, 
    FIRST_VALUE(userdata) OVER (
     PARTITION BY zipcode, DATE(timestamp) 
     ORDER BY timestamp DESC 
    ) AS userdata 
+0

標籤您正在使用的數據庫管理系統。性能問題幾乎總是產品特定的。 – jarlh

+0

您好jarlh,它是postgres 9.1, –

+0

您遇到的性能問題是什麼?執行時間比預期的要長嗎?您是否使用過'EXPLAIN'來生成執行計劃? –

回答

1

你不需要的窗函數:

select distinct on (zipcode, timestamp::date) 
    timestamp, 
    zipcode, 
    userdata 
from t 
order by zipcode, timestamp::date desc, timestamp desc 

檢查distinct on

+0

它看起來很完美。我應該在關閉線程之前測試真正的數據庫(明天),但首先在本地測試顯示您的查詢效率提高了十倍。 謝謝,真的很感謝你的回答。 –

+0

謝謝。它完美地工作 –

相關問題