【问题标题】:How can I order my data as indicated?我如何按指示订购我的数据?
【发布时间】:2016-11-24 16:49:35
【问题描述】:

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

我怎样才能做到这一点?

【问题讨论】:

  • 请标记您正在使用的数据库。另外,我假设日期列实际上是日期而不是字符串。

标签: sql paraccel


【解决方案1】:

大部分 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;

对于不支持此功能的数据库,您可以使用子查询执行类似的操作。

【讨论】:

    【解决方案2】:

    无论您使用什么数据库,您都可以简单地选择结果两次,两次都使用一个告诉行号的枚举列(例如在 T-SQL 中查看如何使用 ROW_NUMBER()),然后加入这两个选择 a.enumerator = b.enumerator - 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多