在PostgreSQL上获取今天和昨天的最新数据



我有一些时间序列数据想要获得某些信息。

我该如何检索两个记录,今天和昨天的最新记录在哪里?

以下是我正在处理的数据的一些示例数据。

latest  price       amount  avg_rating  time
4.9     13323.92256 153     5.466540778 2022-03-05 23:55:56.852459-05 <--- Today's latest record
4.99    13318.92256 154     5.490350302 2022-03-05 23:17:55.814162-05   
5.7     13009.62049 151     6.5314      2022-03-05 02:39:39.826069-05   
5.99    12997.92049 154     6.571948718 2022-03-05 01:13:48.528526-05   
5.99    12911.34049 150     6.867946429 2022-03-04 18:14:01.177497-05 <--- Yesterday's latest record
5.99    12911.34049 151     6.845169492 2022-03-04 17:34:05.538811-05   
5.99    12911.34049 153     6.845169492 2022-03-04 17:08:19.254631-05   

我想要的是低于

latest  price       amount  avg_rating  time
4.9     13323.92256 153     5.466540778 2022-03-05 23:55:56.852459-05
5.99    12911.34049 150     6.867946429 2022-03-04 18:14:01.177497-05

只从时间列中提取日期,并在PARTITION BY子句中使用它。由于需要今天和昨天的数据,因此使用current_date表示今天,current_date-1表示昨天来检索两个日期数据。此查询适用于此禁用WHERE子句的所有日期。使用子查询根据需要选择日期上的最新数据。

SELECT t.latest
, t.price
, t.amount
, t.avg_rating
, t.time
FROM (SELECT *
, ROW_NUMBER() OVER (PARTITION BY time :: VARCHAR(10) :: DATE ORDER BY time DESC) row_num
FROM table_name
WHERE time :: VARCHAR(10) :: DATE BETWEEN current_date - 1 AND current_date) t
WHERE t.row_num = 1

最新更新