2013-04-12 5 views
0

C'est une question difficile à expliquer, voyons si je peux.MySQL: Sélectionnez Distinct sur plusieurs tables et l'ordre par datetime

Je suis à la recherche d'un moyen dans une base MySQL pour sélectionner les 5 dernières entrées (ordonnée par datetime desc) par distincts sur trois tables pid.

Voici un exemple.

TABLE1
* Notez que l'ID de colonne du tableau 1 doit être avec pid substitué correspondent aux autres tables (select id comme pid).

id* datetime 
|-----|------------| 
| 1 | 1/1/2000 | 
| 2 | 2/1/2000 | 
| 3 | 3/1/2000 | ← two 
| 4 | 1/3/2000 | ← five 
| 5 | 1/3/2000 | 

TABLEAU2

id pid datetime 
|-----|-----|------------| 
| 1 | 1 | 1/2/2000 | 
| 2 | 1 | 1/2/2000 | 
| 3 | 2 | 2/2/2000 | ← three 
| 4 | 3 | 1/2/2000 | 
| 5 | 5 | 1/4/2000 | ← four 

TABLE3

id pid datetime 
|-----|-----|------------| 
| 1 | 1 | 6/1/2000 | ← one 
| 2 | 1 | 1/1/2000 | 
| 3 | 1 | 1/1/2000 | 
| 4 | 2 | 1/1/2000 | 
| 5 | 3 | 1/1/2000 | 

Résultat serait

pid datetime 
|-----|------------| 
| 1 | 6/1/2000 | ← one 
| 3 | 3/1/2000 | ← two 
| 2 | 2/2/2000 | ← three 
| 5 | 1/4/2000 | ← four 
| 4 | 1/3/2000 | ← five 


Je suis assez nouveau à mysql. J'ai cherché autour et c'est le meilleur que j'ai trouvé jusqu'ici, mais c'est totalement faux. Merci pour l'aide.

SELECT DISTINCT pid, datetime 
    from (SELECT id AS pid, datetime FROM table1 
     UNION 
     SELECT pid, datetime FROM table2 
     UNION 
     SELECT pid, datetime from table3) t 
    ORDER BY datetime DESC 
    LIMIT 5 
+0

À moins que vous échangez le '' id' et les noms de colonnes de pid' dans 'table2', la ligne' four' ne sera pas le résultat ensemble. –

+0

Merci pour votre aide. Je ne suis pas sûr de ce que tu veux dire? Est-ce que votre réponse ci-dessous n'inclut pas la ligne quatre dans le jeu de résultats? – ctown4life

+0

Non, ce n'est pas le cas. Vous sélectionnez la colonne 'pid' qui a la valeur' 3' pas '5'. Pour pid 5, la ligne résultante sera '5 | 1/3/2000 ». –

Répondre

1

Vous pouvez choisir la date maximale de chaque pid

SELECT pid, max(`datetime`) as `datetime` 
from (SELECT id AS pid, `datetime` FROM table1 
     UNION 
     SELECT pid, `datetime` FROM table2 
     UNION 
     SELECT pid, `datetime` from table3) t 
group by pid 
ORDER BY max(`datetime`) DESC 
LIMIT 5 
+0

Cela semble fonctionner très bien avec mon vrai DB. merci tonnes! – ctown4life

Questions connexes