如何解决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
如果您有可以按逻辑顺序对数据进行排序的列,则此方法将起作用。否则,前几行没有意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。