2010-11-30 4 views
1

J'ai une table:Aide à la requête sql

ID Title Date 
30 1  10/10/2010 
20 1  10/11/2010 
40 2  01/01/2010 

i besoin d'un moyen pour sélectionner des titres distincts avec des dates max.
ainsi quand le titre est 1, je devrais avoir la deuxième rangée choisie puisque la date dans la 1ère rangée est plus petite que la date dans la deuxième rangée.
à la suite de la requête doit retourner:

20 1 10/11/2010 
40 2 01/01/2010 
+0

Ne pas vous dire 30 1 10/11/2010? – StuartLC

+0

Votre jeu de résultats affiche l'ID de la première ligne avec la date de la seconde. Est-ce ce que vous voulez ou une faute de frappe? – Robb

+0

oups mon mauvais ... réparé – scatman

Répondre

2

Votre ensemble de données ne sait pas; voulez-vous l'identifiant minimum et la date maximum?

SELECT ID=MIN(ID), Title, [Date] = MAX([Date]) 
FROM Table 
GROUP By Title 

Ou était-ce une faute de frappe, et que vous souhaitez la ligne avec la date maximale (en supposant que les dates ne peuvent pas suivre la valeur ID)?

SELECT a.ID 
     , a.Title 
     , a.Dt 
FROM Table a 
     JOIN (SELECT b.Title 
         , Dt = MAX(Dt) 
       FROM  Table b 
       GROUP BY Title 
      ) c ON a.Dt = c.Dt 
        AND a.Title = c.Title 
2
select max(ID) as ID, max(Date), Title 
from table 
group by Title 

devrait faire l'affaire

+1

This est valide pour l'échantillon de données mais casse quand la date maximum n'est pas sur la ligne avec l'identifiant maximum – Robb

+0

mais ce n'est pas toujours vrai que le plus grand identifiant ait la date la plus grande .... je vais éditer la table ... – scatman

0
select 
max(ID), Title , max(Date) 
from 
table 
group by 
Title 
+0

ne fonctionnera pas; vous regroupez par ID et Titre, ce qui signifie que toutes les lignes seront renvoyées (en supposant que l'ID soit unique). –

+0

Regroupement par l'ID qui est unique entraînera le retour de toutes les lignes – Robb

+0

Très bon point! Edité pour être correct –