none
SQL: Wie richtig gruppieren bei mehreren Datensätzen RRS feed

  • Frage

  • Salü alle zusammen

    Ich habe folgende Felder:

    ArtikelID (Eindeutige Erkennung, Primary Key)
    ArtikelNr (Durch den Artikel gegebene 3-Stellige Nummer)
    ArtikelDatum (Datum wann der Artikel "gültig" ist
    ArtikelLiefereant
    ArtikelFarbe

    ID   Nr   Datum     Lief     Farb
    1   123 2.4.14 Emmi Gelb
    2 123 3.4.14 Emmi Gelb
    3 789 7.4.14 Coop Grün
    4 789 8.4.14 Coop Grün

    Ich möchte nun alle Artikel, aber nur mit dem höchsten Datum, also ID 2 und ID 4 bekommen. Wie mache ich das?

    SELECT ArtikelLieferant,ArtikelFarbe,ArtikelDatum WHERE Höchstes Datum?????

    Vielen Dank für Hinweise

    Mittwoch, 7. Mai 2014 05:44

Antworten

  • Alternativ gehen auch Windows-Functions:

    Declare @Test as Table(ArtikelID int, ArtikelNr int, ArtikelDatum Date,
    ArtikelLiefereant varchar(20), ArtikelFarbe varchar(20));
    insert into @Test(ArtikelID, ArtikelNr, ArtikelDatum, ArtikelLiefereant,
    ArtikelFarbe) values (1, 123, '20140402', 'Emmi', 'Gelb');
    insert into @Test(ArtikelID, ArtikelNr, ArtikelDatum, ArtikelLiefereant,
    ArtikelFarbe) values (2, 123, '20140403', 'Emmi', 'Gelb');
    insert into @Test(ArtikelID, ArtikelNr, ArtikelDatum, ArtikelLiefereant,
    ArtikelFarbe) values (3, 789, '20140407', 'Coop', 'Grün');
    insert into @Test(ArtikelID, ArtikelNr, ArtikelDatum, ArtikelLiefereant,
    ArtikelFarbe) values (4, 789, '20140408', 'Coop', 'Grün');
     With Vorselektion as
    (
    Select ArtikelID, ArtikelNr, ArtikelDatum, ArtikelLiefereant, ArtikelFarbe,
    ROW_NUMBER() OVER(PARTITION BY ArtikelNr ORDER BY ArtikelDatum desc) as rn
    from @Test
    )
    Select ArtikelID, ArtikelNr, ArtikelDatum, ArtikelLiefereant, ArtikelFarbe
    from Vorselektion
    where rn = 1;

     Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu

    Mittwoch, 7. Mai 2014 07:22

Alle Antworten