Sélectionnez chaque logging avec la première valeur NULL après la valeur non NULL dans l'set d'loggings

J'ai une requête SQL qui returnne un set d'inspections sur une pièce d'équipement avec une colonne indiquant la date à laquelle une réparation a été faite à l'équipement représenté par l'set d'loggings. Si aucune réparation n'a été effectuée au moment de l'inspection, le champ est NULL. L'équipement en question sera réparé plusieurs fois au cours de sa vie.

Je voudrais find le sous-set d'loggings dans la requête qui ont le minimum InspectionDate suivant chaque logging avec une date de réparation non NULL avec une valeur NULL dans le champ RepairDate.

Par exemple:

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 ... 

Doit être jumelé à:

 InspectionDate ReprairDate OtherData 1/1/2010 NULL ... 3/1/2010 NULL ... 7/1/2010 NULL ... 

Je sais que ce serait une question assez sortingviale en utilisant un slider, mais j'essaie de ne pas les utiliser en général et je pense que cela pourrait être fait avec une combinaison de PARTION, OVER et GROUP BY mais je ne suis pas tombé sur le bonne combinaison pour le moment.

Je pense que vous voulez simplement 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; 

Dans vos données, datatables de réparation sont égales à la date d'inspection, lorsque RepairDate n'est pas NULL . Si ce n'est pas vrai, alors la question est quelle date à utiliser pour déterminer la ligne précédente.

Tu peux l'essayer.

 UPDATE a SET a.ReprairDate = NULL FROM TABLE a WHERE a.InspectionDate < '8/1/2010'