none
SQL Group By Problem RRS feed

  • Frage

  • Hallo zusammen,

    ich habe eine Tabelle am SQL Server mit folgenden Feldern

    - ID

    - PLZ

    - Produkt

    - Datum

    - und noch vielen anderen Feldern..

    Nun möchte ich eine View die mir nach PLZ und Produkt gruppiert und die jeweilige ID anhand des aktuellesten (also MAX) Datum ausgibt. Ich steh hier irgendwie auf der Leitung, bin in SQL nicht ganz so fit.

    Dass ich ein GROUP BY für PLZ und Produkt brauche, sowie ein MAX für das Datum weißt ich. Aber wie geb ich dazu die IDs mit aus`?

    Donnerstag, 12. Februar 2015 07:30

Antworten

  • Hallo,

    man kann es über ein GROUP BY lösen, es geht aber auch über eine Fensterfunktion mit ROW_NUMBER (Transact-SQL), siehe dort Beispiel C.Verwenden von ROW_NUMBER () mit PARTITION

    Oder als Beispiel mit ein paar Dummy Daten

    ;WITH sourceData AS
       (SELECT 1 AS ID, '12345' AS PLZ, 'ABC' AS Produkt, {d N'2015-01-01'} AS Datum
        UNION ALL
        SELECT 2 AS ID, '12345' AS PLZ, 'ABC' AS Produkt, {d N'2015-01-02'} AS Datum
        UNION ALL
        SELECT 3 AS ID, '23456' AS PLZ, 'XYZ' AS Produkt, {d N'2015-01-03'} AS Datum
        UNION ALL
        SELECT 4 AS ID, '23456' AS PLZ, 'XYZ' AS Produkt, {d N'2015-01-03'} AS Datum)
    
    , window AS 
        (SELECT ID, PLZ, Produkt, Datum, 
                ROW_NUMBER() OVER (PARTITION BY PLZ, Produkt ORDER BY Datum DESC) AS RowNum
         FROM sourceData)
    
    SELECT *
    FROM window
    WHERE RowNum = 1


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 12. Februar 2015 08:25