none
n Datensätze pro Auftragsnummer ausgeben RRS feed

  • Frage

  • Hallo,

    angenommen ich habe folgende Tabelle (vereinfachtes Beispiel)

    Auftrag, datum, taetigkeit

    100, 21.1.2013, tue das
    100, 22.1.2013, tue dies
    100, 23.1.2013, und tue noch was
    101, 20.1.2013, tue was
    101, 20.1.2013, tue noch was
    101, 21.1.2013, jetzt tue ich was
    ...

    Nun möchte ich von jedem Auftrag die zwei letzten Datensätze angezeigt bekommen:

    100, 22.1.2013 ...
    100, 23.1.2013 ...
    101, 20.1.2013 ...
    101, 21.1.2013 ...

    Existiert nur ein Datensatz für ein Auftrag, soll nur dieser ausgegeben werden.

    Wie sieht dafür die SQL Abfrage aus?

    mfg

    Montag, 18. Februar 2013 20:58

Antworten

  • Hallo,

    select auftrag, datum, taetigkeit from (select auftrag,datum,taetigkeit,row_number()

    over(partition by auftrag order by datum desc )

    as rrn from mytabelle)x where x.rrn <3 order by auftrag,datum desc;

    Das wäre auch eine Möglichkeit.

    Gruss Uli

    Dienstag, 19. Februar 2013 06:52
  • Hallo,

    ich bin jetzt auf diese Select-Abfrage gekommen:

    select auftrag, datum, taetigkeit
    from mytabelle myt
    where myt.guid in (
    select top 2 guid
    from mytabelle
    where auftrag = myt.auftrag
    order by datum desc)
    order by auftrag, datum desc

    Verbesserungspotential?

    • Als Antwort markiert HessischerBub Dienstag, 19. Februar 2013 17:56
    Montag, 18. Februar 2013 21:29

Alle Antworten

  • Hallo,

    ich bin jetzt auf diese Select-Abfrage gekommen:

    select auftrag, datum, taetigkeit
    from mytabelle myt
    where myt.guid in (
    select top 2 guid
    from mytabelle
    where auftrag = myt.auftrag
    order by datum desc)
    order by auftrag, datum desc

    Verbesserungspotential?

    • Als Antwort markiert HessischerBub Dienstag, 19. Februar 2013 17:56
    Montag, 18. Februar 2013 21:29
  • Hallo,

    select auftrag, datum, taetigkeit from (select auftrag,datum,taetigkeit,row_number()

    over(partition by auftrag order by datum desc )

    as rrn from mytabelle)x where x.rrn <3 order by auftrag,datum desc;

    Das wäre auch eine Möglichkeit.

    Gruss Uli

    Dienstag, 19. Februar 2013 06:52
  • Hallo Uli,

    ich habe deine Variante mit meiner Variante verglichen (diesmal mit den echten Daten) und der Ausführungsplan zeigt da ein Verhältnis 10% zu 90%. Deine Variante ist danach die "kostengünstigere".

    Nun habe ich was neues zu lernen, weil ich dieses Konstrukt noch nicht kenne.

    mfg

    Dienstag, 19. Februar 2013 17:56
  • Hallo Uli,

    ich habe deine Variante mit meiner Variante verglichen (diesmal mit den echten Daten) und der Ausführungsplan zeigt da ein Verhältnis 10% zu 90%. Deine Variante ist danach die "kostengünstigere".

    Nun habe ich was neues zu lernen, weil ich dieses Konstrukt noch nicht kenne.

    mfg

    Ich denke, das liegt daran, dass in meinem Ansatz die Unterabfrage nur einmal ausgelöst wird.

    Gruss Uli

    Donnerstag, 21. Februar 2013 07:04