SQL数据操作-窗口函数和复杂的联接可能

时间:2019-04-11 23:49:01

标签: sql postgresql

流式传输视频数据(带有时间戳的事件类型)以使用设备进行源和目标。

base table

Desired Output

select 
r1.customer_id,
'Play on ' || (r1.device) as source,
'Play on ' || lead(r2.device,1) OVER(PARTITION BY r2.customer_id ORDER BY 
r2.time::timestamp ASC) as target
from streaming r1
left join streaming r2 on r1.customer_id=r2.customer_id

以上查询为我提供8 * 8 = 64行,但我需要8行(如上图所示),我们将不胜感激

*使用PostgreSQL

1 个答案:

答案 0 :(得分:1)

您为什么要进行自我加入?结果似乎只需要lag()

select s.customer_id,
       lag(s.device) over (partition by s.customer_id order by s.time) as source,
       s.device as target,
from streaming s;