sql-postgres-timescaledb-limit results by last two dates with value

11dmarpk  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(319)

我试图查询一个表(我们称之为ir prices),如下所示:
价格表:

date_value    date_time_value           price 
    03/12/2020    03/12/2020 12:30:00       2     
    03/12/2020    03/12/2020 12:29:10       3       
    01/12/2020    01/12/2020 17:30:00       1     
    01/12/2020    01/12/2020 11:30:00       2     
    30/11/2020    30/11/2020 17:30:10       3    
    ...

我想查询表中的最后两个日期,但限制是日期\时间\值列中的时间晚于第一个日期中的最后一个时间。
这样地:

date_value    date_time_value           price 
    03/12/2020    03/12/2020 12:30:00       2     
    03/12/2020    03/12/2020 12:29:10       3       
    01/12/2020    01/12/2020 17:30:00       1

我通过嵌套查询实现了这一点,但是这个表有数百万行,速度非常慢。
有没有更简单的方法?
另外,我使用带有timescaledb扩展的postgres。欢迎任何帮助!

6yt4nkrj

6yt4nkrj1#

比如:

WITH first as (SELECT * FROM prices ORDER BY date_time_value DESC LIMIT 1)
SELECT * FROM first 
UNION ALL 
(SELECT * FROM prices WHERE date_time_value < 
(SELECT first.date_time_value::date FROM first)
ORDER BY date_time_value DESC LIMIT 1);

应该会成功的。但我可能误解了你的意图,也就是说,类似的方法应该奏效。

相关问题