如何编写此SQL查询以显示资产?

iyr7buue  于 2022-10-15  发布在  PostgreSQL
关注(0)|答案(1)|浏览(164)

我有一个名为Assets的表,其架构如下

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)--一个月内新部署的资产。
我如何编写此查询?

fcg9iug3

fcg9iug31#

我认为这至少应该会让您开始走上一条道路,但我分析了上个月发生的所有行,然后查看它们的最后更新时间是什么。您可以根据需要调整邮件/格式。
如果您需要更深入地查看过去的历史,您还可以查看postgres窗口函数,如Lag或Lead。

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;

相关问题