Re: Суммирование по накопительному признаку

eddie

Новичок
Re: Суммирование по накопительному признаку

Суммирование по накопительному признаку
Есть таблица
________
|a|b|time|

Так вот мне нужно из неё получить sum(a) для записей начиная от времени T и до того как sum(b) станет равным X.

Т.е. "от обеда и до забора"
Кто-то знает как это описать на SQL?
поругались и тему закрыли (поэтому открыл по новой)
хотя вопрос-то интересный -- есть над чем голову поломать

если данные физически отсортированы по time (то есть всегда insert с большим временем) -- тогда можно сделать следующее:

добавить еще одно поле sumPrevious, где записывать сумму всех предыдущих b

|a|b|sumPrevious|time|
1 1 0 t
2 2 1 t+1
3 3 3 t+2
4 4 6 t+3
5 5 10 t+4

mysumPrevious = select sumPrevious ... where time>xxx limit 1

select * ... where time>xxx and sumPrevious<=mysumPrevious+xx order by time

p.s. удивительно, но модераторы раздражают
 

eddie

Новичок
Re: Re: Суммирование по накопительному признаку

решил сам себя дополнить -- правда справедливо только для mysql

$r=mysql_query('select @b:=0');
mysql_free_result($r);
$r=mysql_query('select a,b,@b:=@b+b from TABLE where time>MYTIME having @b<=MYSUM order by time');

возвращает то что надо + еще одну лишнюю запись
порядок записей в таблице пофиг
 

tony2001

TeaM PHPClub
Re: Re: Суммирование по накопительному признаку

если хочется извращаться - не обязательно выносить этот вопрос на публику.
извращайся локально.

Автор оригинала: eddie
p.s. удивительно, но модераторы раздражают
удивительно, но тупость, упертость и хамство некоторых юзеров тоже раздражает.
 
Сверху