【问题标题】:What would be the Informix SQL for the following problem?以下问题的 Informix SQL 是什么?
【发布时间】:2021-02-28 22:31:30
【问题描述】:

我有一个包含两列的表格,第二列的日期已排序。如图所示,我必须生成关于第二列日期之间差异的第三列。

Ind        Dt_event      duration 
A          31/12/2018      0
A          31/12/2018     26 
A          26/01/2019      4
A          30/01/2019      0
A          30/01/2019     11
A          10/02/2019 
....

解决该问题的 SQL (INFORMIX) 指令是什么?

【问题讨论】:

  • 请注意,它有助于指定您正在使用的 Informix 版本。另请注意,11.70 版自 2020 年 10 月起已停止服务。您的目标应该是升级到 14.10 版 - 或最低版本 12.10。

标签: sql date informix duration


【解决方案1】:

你可以使用lead():

select t.*,
       (lead(dt_event) over (partition by ind order by dt_event) -
        dt_event
       ) as diff
from t;

在旧版本的 Informix 中,您可以使用相关子查询:

select t.*,
       ((select min(t2.dt_event)
         from t t2
         where t2.ind = t.ind and t2.dt_event > t.dt_event
        ) -
        dt_event
       ) as diff
from t;

【讨论】:

  • 不幸的是,我使用的是旧版本(IDS 11.70),我认为它不支持领先功能。任何 SQL 替代方案?
  • 顺便说一句,我已经尝试过应该在 IDS11.70 上工作的 coreekated 子查询,但是当我在 dt_events 列上具有相同值的连续日期时,我没有得到 0。当以下日期相等时,我应该有 0,直到日期改变。
  • @hmoukouri 。 . .如果要处理日期的平局,则每行都需要一个唯一的 ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 2011-07-01
  • 2014-01-23
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多