none
Differenz 2er Datensätze RRS feed

  • Frage

  • Hallo

    ich möchte gerne eine Differenz ermitteln zwischen einem Datensatz und dem vorherigen Datensatz.

    Ich habe jetzt mal mit der Row_number gebastelt. Es läuft zwar, aber ich bin mir nicht sicher, ob es noch etwas besseres gibt.

    Würdet ihr es genauso lösen oder anders?

    WITH rsc
      AS
      (
        select        a.id, a.nid, a.leistung,ROW_NUMBER() OVER(ORDER BY a.id desc) AS Row
        from        daten as a
        where        a.nID = 2
    )
    select        rsc.id, rsc.nID, rsc.leistung, rsc.leistung-a.leistung as differenz
        from rsc
        left join (select id,nid, leistung,ROW_NUMBER() OVER(ORDER BY id desc) AS Row
        from daten where nID=2 )as a
        on    rsc.Row = a.Row-1

     

    id          nID         leistung    differenz
    ----------- ----------- ----------- -----------
    4           1           80          30
    3           1           50          10
    2           1           40          10
    1           1           30          NULL


    Liebe Grüße, die Luzie!
    Samstag, 26. Juni 2010 14:32

Antworten

  • Hallo Luzie,

    ist völlig ok so, nur die derivative table kannst Du sparen, da sie identisch mit der CTE ist, also einfach die verwenden:

    WITH rsc

      AS

      (

        select a.id, a.nid, a.leistung

              ,ROW_NUMBER() OVER(ORDER BY a.id desc) AS Row

        from  daten as a

        where a.nID = 2

    )

    select  rsc.id, rsc.nID, rsc.leistung

          , rsc.leistung-a.leistung as differenz

    from rsc

         left join

         rsc as a

             on rsc.Row = a.Row - 1

     


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    • Als Antwort markiert Luzie Donnerstag, 8. Juli 2010 07:55
    Sonntag, 27. Juni 2010 02:29

Alle Antworten

  • Hallo Luzie,

    ist völlig ok so, nur die derivative table kannst Du sparen, da sie identisch mit der CTE ist, also einfach die verwenden:

    WITH rsc

      AS

      (

        select a.id, a.nid, a.leistung

              ,ROW_NUMBER() OVER(ORDER BY a.id desc) AS Row

        from  daten as a

        where a.nID = 2

    )

    select  rsc.id, rsc.nID, rsc.leistung

          , rsc.leistung-a.leistung as differenz

    from rsc

         left join

         rsc as a

             on rsc.Row = a.Row - 1

     


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    • Als Antwort markiert Luzie Donnerstag, 8. Juli 2010 07:55
    Sonntag, 27. Juni 2010 02:29
  • Hi

    vielen Dank für den Hinweis. :)


    Liebe Grüße, die Luzie!
    Donnerstag, 8. Juli 2010 07:55