2010-06-11 4 views
0

Basé sur le tableau suivantaide t-sql auto rejoindre

ID Date   State 
----------------------------- 
1 06/10/2010 Complete 
1 06/04/2010 Pending 
2 06/06/2010 Active 
2 06/05/2010 Pending 

Je veux que le ouptut suivant

ID Date   State 
--------------------------- 
1 06/04/2010 Complete 
2 06/05/2010 Active 

Alors date la plus ancienne et un État est la plus récente. Je ne parviens pas à appliquer l'auto-jointure sur la table pour obtenir la sortie.

Merci

Répondre

1

Utilisation:

SELECT t.id, 
     MIN(t.date), 
     (SELECT TOP 1 
       x.state 
      FROM TABLE x 
      WHERE x.id = t.id 
     ORDER BY x.date DESC) 
    FROM TABLE t 
GROUP BY t.id 
+0

poneys de grâce. Mais cela ne donne pas le bon État. Il donne en attente pour les deux lignes. – stackoverflowuser

+1

Vous avez besoin d'un DESC sur votre ORDRE DE COMMANDE. –

+0

@Paul Kearney: Thx, corrigé. –

0
select ID, min(Date) Date, (select State 
           from tbl 
          where ID = t.ID and 
            Date = (select max(Date) 
              from tbl 
              where ID = t.ID)) State 
    from tbl t 
group by ID 
+0

@Khorkrak: cela donne 4 lignes en sortie. – stackoverflowuser

+0

Ouais je viens de le tester en MySQL - réessayez sans l'état dans le groupe par - fonctionne maintenant dans MySQL. En ce qui concerne SQL Server, si cela vous pose un problème, essayez d'entourer l'expression d'état avec une fonction d'agrégation telle que Max() – Khorkrak

+0

Cela a fonctionné! Merci Khorkrak. – stackoverflowuser