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支持 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
,

尝试使用相关的子查询。

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

如果您有可以按逻辑顺序对数据进行排序的列,则此方法将起作用。否则,前几行没有意义。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...