2010-04-15 4 views
0

Ici, il est mon problème, j'ai une liste des mesures suivantes:Je ne trouve pas la requête SQL

src1 dst2 24th december 2009 
src1 dst3 22th december 2009 
src1 dst2 18th december 2009 

Je voudrais avoir juste les dernières mesures avec une requête SQL -> 2 premières lignes dans mon cas parce que les paires (src et dst) ne sont pas les mêmes.

J'essaie d'utiliser DISTINCT mais je n'ai que les 2 premières colonnes et toutes les colonnes. J'essaie aussi GROUP BY mais je n'ai pas réussi.

Quelqu'un peut-il m'aider?

Thx

Narglix

Répondre

0
select src, dst, max(date) as Date 
from MyTable 
group by src, dst 

Mise à jour:

select * 
from MyTable t 
inner join (
    select src, dst, max(date) as Date 
    from MyTable 
    group by src, dst 
) tm on t.src = tm.src and t.dst = tm.dst and t.Date = tm.Date 
+0

Ma liste est simplifiée, j'ai d'autres colonnes, mais je ne peux pas utiliser max dans leur cas? – user301089

+0

Voir ma mise à jour pour un moyen de gérer cela. – RedFilter

+0

Thx C'est exactement ce que je veux. Tu es mon sauveur. – user301089

0

ou vous pouvez utiliser le distinct

select distinct on (src,dst) 
     src,dst,date 
    from mytable 
order by src,dst,date desc; 
0

Dans 8.4, vous pouvez également faire:

select src, dst, date 
from (select row_number() over(partition by src, dst order by date desc) as row, 
      src, dst, date 
     from t) x 
where x.row = 1 

Il utilise un seul balayage de table, et aussi généralise comme étant en mesure de prendre les 5 dernières mesures etc.

Questions connexes