none
Nur den letzten Wert ausgeben RRS feed

  • Frage

  • Hallo,

    ich versuche nun schon seit Tagen mir eine Abfrage zu bauen, diese sich aus zwei Tabellen Werte zusammenholt. Eine Komplettübersicht über alle Datensätze ist kein Problem. Ich brauche jedoch eine Auswertung diese mir nur die letzten Werte aller „Vorfälle“ (sortiert nach dem Feld Vorfälle, Indatum) ausgibt.

    Die Komplettübersicht wird mir über den SQL-Befehl angezeigt:

    SELECT dbo.VORFAELLEDETAILS.incident, dbo.FAELLE.step, dbo.VORFAELLEDETAILS.indate, dbo.FAELLE.TOTAL_DEALER_PARTS_C, dbo.FAELLE.TOTAL_CLAIM_COST
    FROM   dbo.FAELLE INNER JOIN
                 dbo.VORFAELLEDETAILS ON dbo.FAELLE.step_id = dbo.VORFAELLEDETAILS.process_step_id

    Ich hoffe, dass ich mein Problem aussagekräftig beschrieben habe.

    Wer könnte mir hier helfen?

    Als Beispiel hier ein Bild - nur die markierte Zeile soll ausgegeben werden:


    Dienstag, 9. Oktober 2018 22:47

Antworten

  • Hi,

    im einfachsten Fall kannst Du das über SELECT TOP 1 ... FROM ... mit entsprechender ORDER BY und ggfs. GROUP BY Klausel machen. Ggfs. sinnvoller und für spätere Anforderungen besser erweiterbar wäre aber sowas:

    WITH Query AS
    (
    SELECT vd.incident,
           f.step,
           vd.indate,
           f.TOTAL_DEALER_PARTS_C,
           f.TOTAL_CLAIM_COST,
           ROW_NUMBER() OVER ( PARTITION BY vd.incident ORDER BY vd.indate DESC ) AS RowNumber
    FROM   FAELLE f
           INNER JOIN VORFAELLEDETAILS vd ON f.step_id = vd.process_step_id
    )
    SELECT *
    FROM   Query
    WHERE  RowNumber = 1


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert sbrand Mittwoch, 10. Oktober 2018 13:11
    Mittwoch, 10. Oktober 2018 06:59
    Moderator

Alle Antworten

  • Hi,

    im einfachsten Fall kannst Du das über SELECT TOP 1 ... FROM ... mit entsprechender ORDER BY und ggfs. GROUP BY Klausel machen. Ggfs. sinnvoller und für spätere Anforderungen besser erweiterbar wäre aber sowas:

    WITH Query AS
    (
    SELECT vd.incident,
           f.step,
           vd.indate,
           f.TOTAL_DEALER_PARTS_C,
           f.TOTAL_CLAIM_COST,
           ROW_NUMBER() OVER ( PARTITION BY vd.incident ORDER BY vd.indate DESC ) AS RowNumber
    FROM   FAELLE f
           INNER JOIN VORFAELLEDETAILS vd ON f.step_id = vd.process_step_id
    )
    SELECT *
    FROM   Query
    WHERE  RowNumber = 1


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert sbrand Mittwoch, 10. Oktober 2018 13:11
    Mittwoch, 10. Oktober 2018 06:59
    Moderator
  • Hallo,

    TOP TOP TOP - genau was ich gebraucht habe.

    Aber darauf würde ich alleine nie kommen - ich muss noch viel lernen :).

    Danke, Danke, Danke

    Mittwoch, 10. Oktober 2018 13:12