2009-09-08 9 views
0

J'ai deux tables. One (Widgets) a une liste de widgets (ID, widget_name, couleur, etc ...) et des données à leur sujet. L'autre (Tests) a une liste de tests exécutés sur les widgets (ID, date, info1, info2, etc ...).Demander les deux entrées les plus récentes par widget

Ce que je veux faire est d'afficher les tests TWO les plus récents. Je ne pense pas que j'ai vraiment besoin d'utiliser la table Widgets pour cela, mais je l'ai décrit afin que vous sachiez d'où je viens.

J'ai construit une requête "Totaux" qui utilise la fonction MAX() et affiche la date la plus récente pour chaque ID. Je peux ensuite utiliser cette requête pour construire une autre requête qui affiche des informations utiles sur le test qui s'est passé à cette date pour ce widget. Ce dont j'ai vraiment besoin, c'est d'avoir les deux dates de test les plus récentes pour chaque widget.

+0

PS: il existe une relation un à plusieurs entre Widgets et Tests. En d'autres termes, il existe plusieurs lignes pour chaque ID dans Tests. Chaque test prend une ligne et est associé à une date particulière. Maintenant, je me sens comme si je parlais trop si mal arrêter. – Matt

+0

Vous pouvez éditer votre propre question - vous n'avez pas besoin d'ajouter un commentaire pour la modifier. –

Répondre

2

Si vous avez besoin des deux tests les plus récents ensemble, puis

Select * From Tests T 
Where (Select Count(*) From tests 
     Where testDate > T.TestDate) < 2 

Si vous avez besoin des deux derniers tests pour chaque widget, puis

Select * From Tests T 
Where (Select Count(*) From tests 
     Where WidgetId = T.WidgetId 
      And testDate > T.TestDate) < 2 
+0

Édité pour éliminer le bug –

+0

Belle. a très bien fonctionné. Merci pour la réponse rapide – Matt

+0

Je ne sais pas si mon commentaire est passé. ça a marché! Merci beaucoup – Matt

0

(en supposant que toutes les dates pour le même widget de sont uniques)

select T.* 
from Widget W 
join Test T on T.widget_id = W.id 
where T.date >= (
    select max(T2.date) 
    from Test T2 
    where T2.widget_id = W.id 
    and T2.date < (
     select max(T3.date) 
     from Test T3 
     where T3.widget_id = W.id 
    ) 
) 
or T.date == (
    select max(T2.date) 
    from Test T2 
    where T2.widget_id = W.id 
) 
Questions connexes