SQL-将当前行日期值与以前所有行的日期进行比较



假设表中有结束日期

End Date
1/1/2018
5/1/2017
6/1/2017
12/31/2020

我需要将每行的日期与以前所有行的日期进行比较,如果当前行的日期小于以前任何一行的日期,则设置一个标志或值

在这种情况下,第3行大于第2行,但小于第1行。第2行也小于第1行。第4行大于的所有其他行

所以结果应该是这样的

End Date    Flag
1/1/2018     NULL ( Since no previous values to compare)
5/1/2017     Y
6/1/2017     Y
12/31/2020   N

我尝试了ROWNUMBER和LAG,但只能比较前一行。不是表中所有的前几行。请告知

我试过ROWNUMBER和LAG

这意味着您的DBMS支持窗口聚合,现在您只需要对ORDER BY执行某些操作即可获得示例中显示的顺序:

case -- Since no previous values to compare
when max(datecol)
over (order by ????
rows bweteen unbounded preceding and 1 preceding) is null
then NULL
--current row date is less than any of the previous rows dates
when datecol 
< max(datecol)
over (order by ????
rows bweteen unbounded preceding and 1 preceding)
then 'Y'
else 'N' 
end

尝试使用相关的子查询。

SELECT *
,CASE WHEN YT.Column_you_want_compared < (SELECT MIN(Column_you_want_compared) FROM YourTable where Order_column < YT.Order_column ) 
THEN 1 
ELSE 0
END as Flag
FROM YourTable YT

如果您有一个可以对数据进行逻辑排序的列,那么这种方法就会奏效。否则,前几行就没有意义了。

相关内容

  • 没有找到相关文章

最新更新