2010-06-21 8 views
0

J'ai une table avec la structure suivante:Sélectionner des valeurs distinctes de deux colonnes

itemId | direction | uid | created 
133   0  17 1268497139 
432   1  140 1268497423 
133   0  17 1268498130 
133   1  17 1268501451 

je dois sélectionner des valeurs distinctes pour deux colonnes - itemId et direction, de sorte que la sortie serait comme ceci:

itemId | direction | uid | created 
432   1  140 1268497423 
133   0  17 1268498130 
133   1  17 1268501451 

Dans la table d'origine, nous avons deux lignes avec itemId - 133 et direction - 0, mais nous n'avons besoin que d'une de ces lignes avec la dernière heure créée.

Merci pour vos suggestions!

Répondre

1

Utilisation:

SELECT t.itemid, 
     t.direction, 
     t.uid, 
     t.created 
    FROM TABLE t 
    JOIN (SELECT a.itemid, 
       MAX(a.created) AS max_created 
      FROM TABLE a 
     GROUP BY a.itemid) b ON b.itemid = t.itemid 
          AND b.max_created = t.created 

Vous devez utiliser un agrégat (IE: MAX) pour obtenir la plus grande valeur créée par itemid, et se joindre à ce sur une copie non modifiée de la table pour obtenir les valeurs associées à la valeur maximale créée pour chaque élément.

1
select t1.itemid, t1.direction, t1.uid, t1.created 
from (select t2.itemid, t2.direction, t2.created as maxdate 
     from tbl t2 
     group by itemid, direction) x 
inner join tbl t1 
    on t1.itemid = x.itemid 
    and t1.direction = x.direction 
    and t1.created = x.maxdate