如何按指示订购我的数据?

时间:2016-11-24 16:49:35

标签: sql paraccel

假设我有一些客户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。

我怎样才能做到这一点?

2 个答案:

答案 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