假设我有一些客户 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
是一个整数,DATE
是一个日期。
我怎样才能做到这一点?
Most dialects of SQL support the ANSI standard window functions, including 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;
For databases that don't support this functionality, you can do something similar with a subquery.
无论您使用什么数据库,您都可以简单地选择结果两次,两次都使用一个告诉行号的枚举列(例如在 T-SQL 中查看如何使用 ROW_NUMBER()),然后只需加入这两个选择在 a.enumerator = b.enumerator - 1