我有一个包含许多记录的表,每个记录都有一个时间戳。我希望每条记录都能加入到之前记录的详细信息中。
以下是我的尝试:
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)
还有其他解决办法吗?
答案 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)