在 PostgreSQL 上获取今天和昨天的最新数据?
Get Latest Data from Today and Yesterday on 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
我有一些时间序列数据,我想获取有关的某些信息。
如何检索两条记录,今天和昨天的最新记录?
这是我正在处理的数据的一些样本数据。
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