Hirdetés

Új hozzászólás Aktív témák

  • nyunyu

    félisten

    válasz nyunyu #5719 üzenetére

    Sebtében összetákolt Oracle példa:
    create table gazora (idobelyeg timestamp, allas number);

    insert into gazora (idobelyeg, allas)
    values (systimestamp, 70);

    insert into gazora (idobelyeg, allas)
    values (systimestamp-1, 65);

    with oraallas as (
    select idobelyeg,
    allas,
    row_number() over (order by idobelyeg desc) rn
    from gazora
    )
    select akt.idobelyeg aktualis_ido,
    akt.allas aktualis_allas,
    elozo.idobelyeg elozo_ido,
    elozo.allas elozo_allas,
    akt.idobelyeg - elozo.idobelyeg eltelt_ido,
    extract(day from (akt.idobelyeg - elozo.idobelyeg)*24*60*60)/60 eltelt_ido_perc,
    akt.allas - elozo.allas allas_valtozas,
    (akt.allas - elozo.allas)/extract(day from (akt.idobelyeg - elozo.idobelyeg)*24*60*60)/60 atlag_fogyasztas
    from oraallas akt
    join oraallas elozo
    on elozo.rn = akt.rn + 1
    where akt.rn = 1;

    CTE-ben megfordítottam a számozás irányát, hogy fixen rn=1 legyen a legutolsó rekord, eggyel nagyobb az eggyel régebbi.
    join feltételben lévő on elozo.rn = akt.rn + 1 feltétellel tudsz játszani, hogy hány méréssel korábbi rekordhoz képest akarsz eltérést, átlagot számolni.

    (interval adattípus miatti típuskonverzióért elnézést, nem lehet értelmesen percre váltani.)

Új hozzászólás Aktív témák