首页 > 解决方案 > 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,我只能比较前一行。不是表中的所有先前行。请指教

标签: sqlcomparelagdatediffrow-number

解决方案


我试过 ROWNUMBER 和 LAG

这意味着您的 DBMS 支持Windowed Aggregates,现在您只需要 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

推荐阅读