我在postgres db中有结构表:
id | item | name | time
1 | A | Shoes | 01
1 | B | Hat | 02
2 | C | Shirt | 01
2 | D | Glove | 02
我需要将此表转换为:
prev_item | item | name
A | B | Hat
C | D | Glove
它基于时间,每个ID
的时间应该是prev_item
sql如何做到这一点?
THX
答案 0 :(得分:0)
使用ROW_NUMBER
& LAG
窗口函数
select * from
(
select row_number()over(partition by id order by time desc) Rn,
lag(item) over(partition by id order by time) prev_item,*
from yourtable
) A
Where Rn = 1