我正试图找到一种从前一行检索值的方法。我想要做的是首先按日期1(最早的第一个)对行进行排序。然后,如果日期2晚于该列中的所有先前日期,我想拉出该行(加上第一个初始行)。我的服务器不支持LAG功能。我尝试过使用CTE的建议,但我的服务器似乎也没有意识到这一点。
我想要做的是检查按日期1排序后,第2行的Date_2是否>第1行的Date_2,如果是,则返回该行。
这是一个示例表。如您所见,ID与日期1的顺序不同。
ID Date 1 Date 2
1 2000-01-01 2010-01-01
2 2001-08-01 2013-06-01
3 2000-06-01 2011-01-01
4 1999-07-01 2010-12-01
5 2002-02-01 2012-12-01
所以在我的例子中,我希望返回这3条记录:
ID Date_1 Date_2 Previous_max
4 1999-07-01 2010-12-01 NULL
3 2000-06-01 2011-01-01 2010-12-01
2 2001-08-01 2013-06-01 2011-01-01
不返回ID 1和5,因为日期1更晚,而日期2早于另一行(分别为4和2)。
答案 0 :(得分:2)
您应该可以使用相关子查询执行此操作:
select t.*,
(select max(date_2) from table t2 where t2.date_1 < t.date_1) as prev_max
from table t
having prev_max is null or prev_max < date_2;