Mon jeu de données comprend des tests sur des périphériques appartenant, mais un appareil peut être acheté et revendumé, et nous ne voulons que les tests associés au plus récent.
Le jeu de données ressemble à ceci: P>
TestID ProductID RegistrationID TestDate 00021357916020 P3K25EL141297 89D617 2019-07-22 00021357915928 P3K25EL141297 89D617 2019-07-15 00021353422334 P3K25EL141297 5PKY90 2019-05-31
3 Réponses :
Vous semblez vouloir vouloir les lignes dont Cette requête prendrait l'avantage d'un index sur enregistrezID code> a le dernier
Testerdate code> par
ProductID code>. Si tel est le cas, une option simple consiste à filtrer avec une sous-requête corrélée;
(enregistrement, testdate) p > p>
DECLARE @t TABLE(TestID NVARCHAR(50), ProductID NVARCHAR(50), RegistrationID NVARCHAR(50), TestDate DATETIME); INSERT INTO @t VALUES ('00021357916020','P3K25EL141297','89D617','2019-07-22'), ('00021357915928','P3K25EL141297','89D617','2019-07-15'), ('00021353422334','P3K25EL141297','5PKY90','2019-05-31'); -- Or like this... SELECT t1.* FROM @t t1 CROSS APPLY (SELECT TOP 1 RegistrationID FROM @t WHERE ProductID = t1.ProductID ORDER BY TestDate DESC) t2 WHERE t2.RegistrationID = t1.RegistrationID;
avec Voir le Demo . first_value () code> Fonction de fenêtre:
Résultats: P> > TestID | ProductID | RegistrationID | TestDate
> :---------- | :------------ | :------------- | :---------
> 21357916020 | P3K25EL141297 | 89D617 | 2019-07-22
> 21357915928 | P3K25EL141297 | 89D617 | 2019-07-15
Vous pourrez peut-être utiliser un déclencheur SQL pour enregistrer la dernière modification à cette table. Cependant, cela dépend si d'autres entrées seront ajoutées / éditées après sa production. Y a-t-il une table qui conserve tous les enregistrements? Ceux-ci ne semblent pas être uniques dans vos exemples de données.