假设我有一些客户ID和交易日期。
ID DATE
1 OCT 1
1 OCT 2
1 OCT 3
1 OCT 31
我想要的是一列显示他们之前的交易日期,另一列显示他们的下一个交易日期(如下所示)。
ID DATE1 DATE2
1 OCT 1 OCT 2
1 OCT2 OCT3
1 OCT 3 OCT 31
此处ID
为INTEGER,DATE
为DATE。
我怎样才能做到这一点?
答案 0 :(得分:0)
SQL的大多数方言都支持ANSI标准窗口函数,包括lead()
:
select t.*
from (select t.*,
lead(date) over (partition by id order by date) as next_date
from t
) t
where next_date is not null;
对于不支持此功能的数据库,您可以使用子查询执行类似的操作。
答案 1 :(得分:0)
无论您使用的数据库是什么,您只需选择结果两次,两次都使用枚举器列来告诉行号(例如在T-SQL中查看如何使用ROW_NUMBER()),然后只需加入这两个选择a.enumerator = b.enumerator - 1