db2 - 将每一行连接到其前一行

时间:2014-07-10 09:01:14

标签: db2

我有一个包含许多记录的表,每个记录都有一个时间戳。我希望每条记录都能加入到之前记录的详细信息中。

以下是我的尝试:

Select t.*, max(timestamp) 
from TABLE as t
LEFT JOIN (
    Select * from TABLE 
) as prev_records on (prev_records.timestamp < t.timestamp)

此查询尝试返回记录,以及在其之前创建的记录。我需要从两个记录中返回数据。我尝试过的方法是:对于每一行,我必须在select子句中做一个子选择,选择timeStamp = Max(timestamp)的数据

这样:

Select t.*, max(timestamp) , ( Select id from TABLE  where timestamp = max(timestamp)) 
from TABLE as t       
LEFT JOIN (
    Select * from TABLE 
) as prev_records on (prev_records.timestamp < t.timestamp)

还有其他解决办法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用公用表表达式,计算ROW_NUMBER以按年龄对记录进行排名,即。及时倒退。然后,您可以将每一行连接到下一个较旧的行。

with INP as
( select t.*,
         row_number() over (order by t.whenAdded) as age
    from TABLE t
)
select c.variousFields, p.moreFields
  from INP c
  join INP p  on c.age=(p.age - 1)