2010-01-18 5 views
7

excuse le titre, je ne pouvais pas trouver quelque chose de court et au point ...sélectionner les dernières lignes par clé étrangère distincte valeur

J'ai une table « mises à jour » avec les trois colonnes, le texte , typeid, created - text est un champ de texte, typeid est une clé étrangère d'une table 'type' et créé est un horodatage. Un utilisateur saisit une mise à jour et sélectionne le 'type' auquel il correspond également.

Il existe un tableau 'type' correspondant avec les colonnes 'id' et 'name'.

J'essaie de terminer avec un jeu de résultats avec autant de lignes que dans la table 'type' et la dernière valeur de updates.text pour la ligne particulière dans les types. Donc, si j'ai 3 types, 3 lignes seront retournées, une ligne pour chaque type et la valeur la plus récente de updates.text pour le type en question.

Des idées?

merci,

John.

Répondre

14
select u.text, u.typeid, u.created, t.name 
from (
    select typeid, max(created) as MaxCreated 
    from updates 
    group by typeid 
) mu 
inner join updates u on mu.typeid = u.typeid and mu.MaxCreated = u.Created 
left outer join type t on u.typeid = t.typeid 
0

Quelles sont les colonnes que vous voulez retourner?

SELECT t.*, 
     y.* 
    FROM TYPE t 
    JOIN (SELECT u.typeid, 
       MAX(u.created) 'max_created' 
      FROM UPDATES u 
     GROUP BY u.typeid) x ON x.typeid = t.id 
    JOIN UPDATES y ON y.typeid = x.typeid 
       AND y.created = x.max_created 
0
SELECT 
    TYP.id, 
    TYP.name, 
    TXT.comment 
FROM 
    dbo.Types TYP 
INNER JOIN dbo.Type_Comments TXT ON 
    TXT.type_id = TYP.id 
WHERE 
    NOT EXISTS 
    (
      SELECT 
       * 
      FROM 
       dbo.Type_Comments TXT2 
      WHERE 
       TXT2.type_id = TYP.id AND 
       TXT2.created > TXT.created 
    ) 

Ou:

SELECT 
    TYP.id, 
    TYP.name, 
    TXT.comment 
FROM 
    dbo.Types TYP 
INNER JOIN dbo.Type_Comments TXT ON 
    TXT.type_id = TYP.id 
LEFT OUTER JOIN dbo.Type_Comments TXT2 ON 
    TXT2.type_id = TYP.id AND 
    TXT2.created > TXT.created 
WHERE 
    TXT2.type_id IS NULL 

Dans les deux cas, si la date de création peut être identique entre deux rangées avec le même type_id alors vous devez tenir compte pour cela.

J'ai également supposé qu'au moins un commentaire par type existe. Si ce n'est pas le cas, vous devrez également faire un petit ajustement pour cela.

Questions connexes