04 września 2015

[MYSQL] Różnicowanie pomiędzy rekordami

Ostatnio myślałem jak utworzyć zapytanie wyliczajace różnice pomiędzy rekordami czyli jeżeli mamy coś takiego:

F1
F2
F3
F4
F5

to:

F1-F2
F2-F3
F3-F4
F4-F5

Jako klucza użyłem daty wprowadzenia z powodu iż łatwiej wyszukać ostatnie wprowadzenie rekordu oraz rekordu-1
Poniżej przedstawione zapytanie jak to działa:


SELECT
    t1.id,
    t2.id,
    t1.datawprowadzenia,
    t2.datawprowadzenia,
    t1.ciepla,
    t2.ciepla,
    t1.zimna,
    t2.zimna,
    t1.prad,
    t2.prad,
    t1.gaz,
    t2.gaz,
    t1.ciepla - t2.ciepla AS CieplaR,
    t1.zimna - t2.zimna AS zimnaR,
    t1.prad - t2.prad AS pradR,
    t1.gaz - t2.gaz AS gazR
FROM
    Odczyty t1,
    Odczyty t2
WHERE
    t2.id = (SELECT
            t3.id
        FROM
            Odczyty t3
        WHERE
            t3.datawprowadzenia < t1.datawprowadzenia AND t3.aktywny = 1
        ORDER BY datawprowadzenia DESC
        LIMIT 1)
        AND t2.aktywny = 1
        AND t1.aktywny = 1
ORDER BY t1.datawprowadzenia DESC