繁体   English   中英

在记录集中的非NULL值之后选择具有第一个NULL值的每个记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM