Ich habe zwei Tabellen und möchte MAX (Datum) von einer Eins-zu-Viele-Tabelle erhalten. Wenn es keinen Wert gibt, sollte es NULL sein. Ich weiß nur, wie ich das mache, indem ich Unterabfragen mache, aber wenn es ~ 20 verschiedene Typen gibt, dann klingen 20 Unterabfragen nicht effizient genug. Gibt es einen besseren Weg?Mehrere MAX-Werte von einer Eins-zu-viele-Tabelle erhalten
Table A: UserId | Name 1 | John 2 | Jane Table B: UserId | Type | Date 1 | A | 2015-01-01 1 | A | 2015-12-31 1 | B | 2015-01-01 1 | B | 2015-12-31 2 | B | 2015-06-06 1 | C | 2015-01-01 2 | C | 2015-09-09 Result: UserId | Type A date | Type B date | Type C date 1 | 2015-12-31 | 2015-12-31 | NULL 2 | NULL | 2015-06-06 | 2015-09-09
Current solution: SELECT UserId, (SELECT MAX(Date) FROM B WHERE Type = 'A' AND B.UserId= A.UserId), (SELECT MAX(Date) FROM B WHERE Type = 'B' AND B.UserId= A.UserId), (SELECT MAX(Date) FROM B WHERE Type = 'C' AND B.UserId= A.UserId AND Date > (SELECT MAX(Date) FROM B WHERE Type = 'B' AND B.UserId = A.UserId)) FROM A
Vielen Dank für alle schnellen Antworten! Sie funktionieren perfekt. Ich habe meine Frage etwas modifiziert, seit ich bemerkt habe, dass ich bei einigen Typen einige Bedingungen hinzufügen muss. Beispielsweise. Typ C nur präsentiert werden sollte, wenn es größer als Typ B.
Typ C mit userId 1 ist null? – Kason
@Kason Ja sollte es NULL sein, da ich das nur präsentieren möchte, wenn Datum größer als Typ B ist. – tep12
warum 2015-09-09 -> 2016-09-09? – Kason