【发布时间】:2018-04-17 01:18:16
【问题描述】:
我有一个看起来像这样的集合
ID date_IN date_out
1 1/1/18 1/2/18
1 1/3/18 1/4/18
1 1/5/18 1/8/18
2 1/1/18 1/5/18
2 1/7/18 1/9/18
我从
开始SELECT ID, date_IN, Date_out, lead(date_out) over ( partition by (ID)
order by ID) as next_out
From table
然后得到这样的东西......
ID date_IN date_out next_out
1 1/1/18 1/2/18 1/4/18
1 1/3/18 1/4/18 1/8/18
1 1/5/18 1/8/18 Null
2 1/1/18 1/5/18 1/9/18
2 1/7/18 1/9/18 Null
我将遇到的问题是,在我的实际数据中,许多 ID 都有很多条目。目标是让所有的 date_out 出现在每个 ID 的一行中......
ID date_IN date_out next_out next_out1 etc. etc.
1 1/1/18 1/2/18 1/4/18 1/8/18 X X
2 1/1/18 1/5/18 1/7/18 X Null Null
有没有办法让lead() 循环遍历整个分区,按ID 顺序删除除第一行以外的所有内容,然后移至下一个ID?
【问题讨论】:
-
SQL 查询需要在结果集中有一组特定的列。
etc.不是列的有效表示,因此我认为您无法使用基本的SELECT查询来做您想做的事情。 -
@a.s.1 - 您需要 PL/SQL 或动态 SQL,因为您需要知道执行多少次 LEAD() - lead(date_out, 1)...lead(date_out, 2)....等等。