Hey, sorry I what I say is obvious for you . If I understood your problem correctly, it is strictly equivalent to this one : http://postgresql.1045698.n5.nabble.com/Count-of-records-in-a-row-td5775363.html
there is a postgres trick to solve this problem : what you want is essentially generate a unique group_id, but one that depends of an order of row not defined in the group. The solution is to generate a row number by the order you want , then a row number by the group , then a subtraction of the 2 row number gives you an unique id per group. The cost is that you have to use 2 windows function., hence 2 scans I guess. Cheers, Rémi-C 2014-09-21 17:51 GMT+02:00 Andrew Gierth <and...@tao11.riddles.org.uk>: > >>>>> "Pavel" == Pavel Stehule <pavel.steh...@gmail.com> writes: > > Pavel> Hi > Pavel> I tried to solve following task: > > Pavel> I have a table > > Pavel> start, reason, km > Pavel> ============= > Pavel> 2014-01-01 08:00:00, private, 10 > Pavel> 2014-01-01 09:00:00, commerc, 20 > Pavel> 2014-01-01 10:00:00, commerc, 20 > Pavel> 2014-01-01 11:00:00, private, 8 > > Pavel> and I would reduce these rows to > > Pavel> 2014-01-01 08:00:00, private, 10 > Pavel> 2014-01-01 09:00:00, commerc, 20 + 20 = 40 > Pavel> 2014-01-01 11:00:00, private, 8 > > Pavel> It is relative hard to it now with SQL only. > > Only relatively. My standard solution is something like this: > > select start_time, reason, sum(km) as km > from (select max(label_time) over (order by start) as start_time, > reason, km > from (select start, reason, km, > case when reason > is distinct from > lag(reason) over (order by start) > then start > end as label_time > from yourtable > ) s2 > ) s1 > group by start_time, reason > order by start_time; > > (Your change_number idea is essentially equivalent to doing > sum(case when x is distinct from lag(x) over w then 1 end) over w, > except that since window functions can't be nested, that expression > requires a subquery.) > > -- > Andrew (irc:RhodiumToad) > > > -- > Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-hackers >