2017-08-24 1 views
-2

Je Hava une table USER:Comment sélectionner l'élément de date récente

select t.* from user t; 
uid uname 
1 tom 
2 jim 
3 bob 
4 lily 

et une table JOUETS

select t.* from toys t; 
tid uid tdate 
1 1 7/12/15 
2 1 6/12/15 
3 2 9/12/15 
4 2 10/12/15 
5 3 12/12/15 

maintenant je veux

uid tid uname tdate 
1 2  tom 6/12/15 
2 3  jim 9/12/15 
3 5  bob 12/12/15 
4   lily 

que dois-je faire? (J'utilise la base de données Oracle);

+0

voulez vous les jouets avec les utilisateurs, triés par date ou par les utilisateurs avec le plus récent toy seulement ? – Roman

+0

avec une date minimale – wkzq

Répondre

0

Vous pouvez générer une séquence pour chaque utilisateur et retirer seulement le min date pour chaque jouet:

SELECT user.uid, toys.tid, user.name, toys.tdate 
    FROM  
     (SELECT tid, uid, tdate, 
     ROW_NUMBER() OVER (PARTITION BY uid ORDER BY tdate asc) 
     AS SEQ 
     FROM toys 
    )table1 
LEFT JOIN user on toys.uid = user.uid 
WHERE SEQ = 1 
+0

vous pensez est correct, mais vous écrivez incorrect. – wkzq

0

le plus récent TDate par jouet et utilisateur:

SELECT a.uid, b.tid, a.uname, MAX(b.tdate) AS tdate 
FROM user a LEFT JOIN toys b ON a.uid = b.uid 
GROUP BY a.uid, b.tid, a.uname 

ou jouet le plus récent par utilisateur (le cas échéant):

SELECT a.uid, b.tid, a.uname, MAX(b.tdate) 
FROM user a LEFT JOIN toys b ON a.uid = b.uid 
GROUP BY a.uid, a.uname 
+0

ce sql ne peut pas exécuter – wkzq