2012-08-14 228 views
3

我有一個表格功能,它有一個名爲sample_time的datetimetz字段和一個名爲amp_hours的列。如何查詢每一天的最後一條記錄

amp_hours字段每兩分鐘獲得一條記錄,並在午夜每晚重置。

我想看看sample_time和amp_hours爲每天的最後記錄。

我對SQL很陌生,所以我可能忽略了一個明顯的答案。

我看到這個post如何選擇一組的最後一個記錄,但我沒有足夠的熟悉SQL得到它的日期時間的工作:

我想用lead()lag()比較日期的記錄與下一個記錄,但我使用postgresql 8.3,我認爲窗口引入8.4。

回答

5

試試這個:

SELECT DISTINCT ON (sample_time::date) sample_time, amp_hours 
FROM power 
ORDER BY sample_time::date DESC, sample_time DESC; 
+1

很好的解決方案,第一個'DESC'是可選的。 – 2012-08-14 16:56:26

+0

謝謝,這很聰明!如果我正確地理解了這一點,那麼'DISTINCT ON(sample_time :: date)'確保每天只返回一條記錄,其餘的則由ORDER BY完成。如果我省略第二個DESC,我會得到每天的第一個記錄。第一個DESC只是最先記錄最新的記錄。 – RyanN 2012-08-14 17:07:03

+0

@RyanN:['DISTINCT'](http://www.postgresql.org/docs/current/interactive/sql-select.html#SQL-DISTINCT)自動按(不同)列排序。你可以添加一個顯式的'ORDER BY' - 它不能不同意'DISTINCT' - 對於不同的列使用額外的列和/或'DESC'而不是默認的'ASC'。 – 2012-08-14 17:22:32

相關問題