sqlite - Running Total example -
i have following data:
id customer date value1 value2 istrue 10 13 2013-08-20 00:00:00.0000 170 180680 0 11 13 2013-09-02 00:00:00.0000 190 181830 0 12 13 2013-09-07 00:00:00.0000 150 183000 1 13 13 2013-09-14 00:00:00.0000 150 183930 0 14 13 2013-09-16 00:00:00.0000 150 184830 0 15 13 2013-09-19 00:00:00.0000 150 185765 1 16 13 2013-09-30 00:00:00.0000 800 187080 0 17 13 2013-10-02 00:00:00.0000 100 188210 0 28 13 2013-10-04 00:00:00.0000 380 188250 1
how can have following results,where sumvalue1 summury of value1 until field istrue gets true , resets after , difference value2 difference of field value2 everytime istrue field gets true?
id customer date value1 value2 istrue sumvalue1 differencevalue2 10 13 2013-08-20 00:00:00.0000 170 180680 0 11 13 2013-09-02 00:00:00.0000 190 181830 0 12 13 2013-09-07 00:00:00.0000 150 183000 1 510 2320 13 13 2013-09-14 00:00:00.0000 150 183930 0 14 13 2013-09-16 00:00:00.0000 150 184830 0 15 13 2013-09-19 00:00:00.0000 150 185765 1 450 2765 16 13 2013-09-30 00:00:00.0000 800 187080 0 17 13 2013-10-02 00:00:00.0000 100 188210 0 28 13 2013-10-04 00:00:00.0000 380 188250 1 1280 2485
assuming id
ordering, query do:
select id, customer, date, value1, value2, istrue, case istrue when 1 (select total(value1) t customer=t2.customer , id>t2.prev_id , id<=t2.id) end sumvalue1, case istrue when 1 value2-(select value2 t customer=t2.customer , id=t2.prev_id) end differencevalue2 (select *, case istrue when 1 coalesce((select id t _ customer=t.customer , date<t.date , istrue order date desc limit 1), -1) end prev_id t) t2;
steps step:
previous id
istrue
given by:
select id t _ customer=t.customer , date<t.date , istrue order date desc limit 1
using coalesce(..., -1)
ensure non-null id
before others (-1
).
select *, case istrue when 1 ... end prev_id t
return rows t
column prev_id
added.
at last, querying select total(value1) t customer=t2.customer , id>t2.prev_id , id<=t2.id
, value2-(select value2 t customer=t2.customer , id=t2.prev_id
on previous results return desired results.
Comments
Post a Comment