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

SQL-将当前行日期值与所有以前的行日期进行比较,sql,compare,lag,datediff,row-number,Sql,Compare,Lag,Datediff,Row Number,假设我在表中有一个结束日期 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

假设我在表中有一个结束日期

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,我只能比较前一行。不是表中所有前面的行。请建议尝试使用相关子查询

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
如果您有一列可以对数据进行逻辑排序,那么这种方法将起作用。否则,前面的行没有意义

我试过了ROWNUMBER和LAG

这意味着您的DBMS支持窗口聚合,现在您只需要订购一些东西即可获得示例中所示的顺序:

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

前几行的顺序是什么?是否有一个像id这样的列来定义顺序?在编辑您的问题以使其可读之后,我意识到您需要一个排序列。SQL是无序的,由引擎以最快的顺序呈现数据。这是不可预测的。您使用的是什么DMB和什么版本?谢谢您的回复。但此查询将与表中的所有行进行比较。我只想与当前行中的前几行进行比较,而不是与当前行之后的任何行进行比较。我的意思是我想将第3行与第2行和第1行进行比较,但我不想将第3行与第4行进行比较,其中Order_column