2016-04-19 20 views
0

Erstens meiner sql:Sortieren nach mit deutlicher

SELECT DISTINCT(CarTable.CarPlate), CarTable.CarImage, EventTable.FirstDate 
FROM CarTable JOIN EventTable ON CarTable.CarId = EventTable.CarId 
ORDER BY 3 DESC 

Ich versuche, um Reihen von Datum und das funktioniert gut, aber ich mag, dass alle Platten nur einmal geschrieben werden. Ich meine, ich muss das letzte Event des Autos sehen, aber es scheint, dass ich eindeutig falsches benutze. Was ist der beste Weg, dies zu tun?

+2

DISTINCT ist keine Funktion für eine Spalte, sie ist ein Teil von 'SELECT DISTINCT' und gilt für die gesamten ausgewählten Zeilen. I.e. 'SELECT DISTINCT (CarTable.CarPlate), CarTable.CarImage, ...' ist das selbe wie 'SELECT DISTINCT CarTable.CarPlate, CarTable.CarImage ...', das ist das selbe wie 'SELECT DISTINCT CarTable.CarPlate, (CarTable .CarImage) ... '. – jarlh

Antwort

3

Verwenden MAX und GROUP BY:

SELECT 
    c.CarPlate, 
    c.CarImage, 
    FirstDate = MAX(e.FirstDate) 
FROM CarTable c 
INNER JOIN EventTable e 
    ON c.CarId = e.CarId 
GROUP BY c.CarPlate, c.CarImage 
ORDER BY MAX(e.FirstDate) DESC 

Hinweis:

  • Nutzung sinnvoll Alias, um die Lesbarkeit zu verbessern.
+0

@jarlh Danke! Aktualisiert. –

+1

Ich ersetzte "c" durch "e" für MAX-Funktionen und es hat den Trick gemacht. Vielen Dank :) –

0

Oder mit einem Fenster und DISTINCT:

SELECT DISTINCT 
    C.CarId, 
    C.CarImage, 
    MAX(E.FirstDate) OVER (PARTITION BY E.CarId) FirstDate 
FROM CarTable C 
JOIN EventTable E ON C.CarId = E.CarId 
ORDER BY FirstDate DESC 
1

zu sehen, wenn diese Arbeit ohne Aggregat-Funktion.

SELECT c.CarPlate 
    ,c.CarImage 
    ,ev.FirstDate 
FROM CarTable C 
CROSS APPLY (
    SELECT max(FirstDate) FirstDate 
    FROM EventTable E 
    WHERE c.CarId = e.CarId 
    ) ev 
ORDER BY ev.FirstDate DESC