我有一个表调用带有以下模式的资产
CREATE TABLE assets
(
id int,
location_id int,
updated_at timestamp
)
资产可以按时间分配到不同的位置,但一次只能分配一个位置,此表跟踪所有资产和所有位置更改。比如
(1,1,2022-08-01)
(1,2,2022-09-01)
(1,3,2022-10-01)
(2,1,2022-01-01)
(3,2,2022-10-05)
(4,1,2022-01-01)
(4,2,2022-02-01)
我需要查询以下结果:返回在一个月内新部署或在一个月内重新部署的资产。对于上面的数据集,它应该返回:
(1)-资产1在一个月内搬迁
(3)--一个月内新部署的资产。
如何编写此查询?
发布于 2022-10-13 20:19:01
我认为这至少会让您开始一条路径,但我提取了上个月发生的所有行,然后查看它们的上一次更新时间。您可以根据需要调整消息/格式。
如果您需要更深入地了解过去的历史,还可以查看Postgres窗口函数,如延迟或引导。
select id, location_id, updated_at,
(select max(updated_at) from assets a2 where a2.id = a.id and a2.updated_at < a.updated_at) as last_update_at
from assets a
where a.updated_at between current_timestamp - interval '1 month' and current_timestamp;
https://stackoverflow.com/questions/74060519
复制相似问题