如何查询每一天的最后一条记录

问题描述:

我有一个表格功能,它有一个名为sample_time的datetimetz字段和一个名为amp_hours的列。如何查询每一天的最后一条记录

amp_hours字段每两分钟获得一条记录,并在午夜每晚重置。

我想看看sample_time和amp_hours为每天的最后记录。

我对SQL很陌生,所以我可能忽略了一个明显的答案。

我看到这个post如何选择一组的最后一个记录,但我没有足够的熟悉SQL得到它的日期时间的工作:

我想用lead()lag()比较日期的记录与下一个记录,但我使用postgresql 8.3,我认为窗口引入8.4。

试试这个:

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