[英]Select each record with first NULL Value after non-NULL value in record set
我有一个SQL查询,该查询返回对一件设备的一组检查,其中一列指示对记录集表示的设备进行维修的日期。 如果在检查时未进行任何修复,则该字段为NULL。 有问题的设备将在其使用寿命内进行多次维修。
我想在查询中找到记录的子集,该记录的子集在每条记录之后具有最小的InspectionDate,且其修复日期为非NULL,修复日期为RepairDate字段中的NULL。
例如:
InspectionDate ReprairDate OtherData
1/1/2010 NULL ...
2/1/2010 NULL ...
2/15/2010 2/15/2010 ...
3/1/2010 NULL ...
4/1/2010 NULL ...
5/1/2010 5/1/2010 ...
6/1/2010 6/1/2010 ...
7/1/2010 NULL ...
应该配对为:
InspectionDate ReprairDate OtherData
1/1/2010 NULL ...
3/1/2010 NULL ...
7/1/2010 NULL ...
我知道使用游标是一件相当琐碎的事情,但是我试图摆脱一般使用它们的感觉,并且感觉可以通过PARTION,OVER和GROUP BY的某种组合来完成,但是我并没有偶然发现正确的组合呢。
我认为您只是想要lag()
:
select t.*
from (select t.*, lag(RepairDate) over (order by InspectionDate) as prevRepairDate
from table t
) t
where prevRepairDate is not null and RepairDate is NULL;
在您的数据中,当RepairDate
不为NULL
时,修复数据等于检查日期。 如果不是这样,那么问题是用于确定上一行的日期。
你可以试试。
UPDATE a SET a.ReprairDate = NULL FROM TABLE a WHERE a.InspectionDate < '8/1/2010'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.