2017-12-18 3 views
1

Ich habe zwei Tabellen:Subquery mit zwei Tischen

__Table R_____

ID.....CustID....DATE 
1......1.........2000-01-01 
2......2.........2000-01-02 
3......2.........2000-01-03 
4......2.........2000-02-22 
5......1.........2000-03-23 

__Table Customers______

ID....NAME 
1.....Lucas 
2.....Michael 

Bitte, wie könnte ich eine SELECT tun, was gibt die letzte DATUM vom NAME jedes Kunden? (Auf diese Weise):

Lucas......2000-03-23 
Michael....2000-02-22 
+5

Hinweis: 'JOIN',' GROUP BY', 'MAX()'. –

Antwort

0

Sie verwenden können:

select c.name, max(r.date) 
from table_customers c 
join table_r r on r.custid = c.id 
group by c.id, c.name; 
+0

Es funktioniert auch! Vielen Dank. Warum GROUP BY c.name? Reicht das nicht mit Gruppierung nach c.id? –

+0

Ich kenne Ihren 'sql_mode' Wert nicht. Wenn Sie es auf 'ONLY_FULL_GROUP_BY' gesetzt haben, würde es einen Fehler auslösen, wenn Sie nur nach c.id gruppieren. Wenn nicht, würde es irgendeinen Wert von 'name' von dieser Gruppe zurückgeben. – DecoderReloaded

0

Die wählen Sie benötigen, MAX mit dem neuesten Datum zurück:

SELECT customer.name, MAX(r.date) 

Die join aus den beiden Tabellen:

FROM r INNER JOIN customer ON r.custid = customer.id 

Aber, wenn Sie das neueste Datum jeden Kunden benötigen, müssen Sie es group:

GROUP BY r.custid; 
+0

Danke, es funktioniert! –

0
select c.name, r.date 
from table_customers c 
join table_r r on r.custid = c.id 
ORDER BY r.date DESC 
LIMIT 2 ;