none
SELECT-Befehl gesucht RRS feed

  • Frage

  • Hallo,
    ich habe folgende Tabelle Test:
     
    ID     A_Nummer        Ertellt                    Reihe
    0     008              2012-02-15 14:11:50         A
    1       008            2012-02-15 14:12:50         A
    2       007            2012-02-15 14:13:50         A
    3       007            2012-02-15 14:13:55         A
    4       008            2012-02-15 14:14:30         A
    5       006            2012-02-15 14:14:40         A
    6       007            2012-02-15 14:14:50         A

    Ich benötige ein SELECT, welches von jeder A_Nummer den aktuellsten Datensatz zurückgibt.
    Reihe muss bei WHERE angegeben werden, da es mehrere Typen von Reihe gibt.

    Soll-Ergebnis:
    006            2012-02-15 14:14:40       A
    008            2012-02-15 14:14:30       A
    007            2012-02-15 14:14:50       A

    Dies funktioniert nicht:
    SELECT DISTINCT * FROM Test
    WHERE Reihe = 'A'
    AND Erstellt IN
    (SELECT MAX(Erstellt) from Test WHERE Reihe = 'A')
     

    Was muss ich ändern?

    Alexander

    Mittwoch, 15. Februar 2012 13:34

Antworten

  • Hallo Alexander, probiere mal das hier:

    SELECT *
    FROM Test t
    WHERE Reihe = 'A'
    AND Erstellt IN
    (SELECT MAX(Erstellt) from Test t1 WHERE t.Reihe = t1.Reihe and t.A_Nummer =
    t1.A_Nummer)

    Bei Dir fehlte die Verknüpfung über die A_Nummer, da Du ja zu jeder A_Nummer das Maximum willst, oder?

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

    • Als Antwort markiert AlexanderRi Mittwoch, 15. Februar 2012 15:49
    Mittwoch, 15. Februar 2012 13:49

Alle Antworten

  • Hallo Alexander, probiere mal das hier:

    SELECT *
    FROM Test t
    WHERE Reihe = 'A'
    AND Erstellt IN
    (SELECT MAX(Erstellt) from Test t1 WHERE t.Reihe = t1.Reihe and t.A_Nummer =
    t1.A_Nummer)

    Bei Dir fehlte die Verknüpfung über die A_Nummer, da Du ja zu jeder A_Nummer das Maximum willst, oder?

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

    • Als Antwort markiert AlexanderRi Mittwoch, 15. Februar 2012 15:49
    Mittwoch, 15. Februar 2012 13:49
  • Hallo Alexander!
     
    Ich würde das über eine CTE lösen:
     
       WITH
          TestNumeriert AS
             (
                SELECT
                      ROW_NUMBER() OVER
                         (
                            PARTITION BY
                               Reihe,
                               A_Nummer
                            ORDER BY
                               Erstellt DESC
                         ) AS Nr,
                      A_nummer,
                      Erstellt,
                      Reihe
                   FROM
                      Test
             )
       SELECT
             A_Nummer,
             Erstellt
          FROM
             TestNumeriert
          WHERE
             Reihe = 'A'
             AND Nr = 1;
     
     
    Grüße
    Thomas
     
    --
    Any problem in computer science can be solved with another layer
    of indirection. But that usually will create another problem.
                                       David Wheeler
     
    Mittwoch, 15. Februar 2012 14:01