Обработка данных, нужно решение и совет.

Astral Man

We Will Rock You
Обработка данных, нужно решение и совет.

Привет всем.

Есть таблица с данными:
data - дата
reis - номер рейса
sum - сумма

Делаю запрос за последние 30 дней
Результат:
...
11.22.2004 - 1 - 9000.00
11.22.2004 - 1 - 137320.00
11.22.2004 - 1 - 27000.00
11.22.2004 - 2 - 62579.36
11.22.2004 - 2 - 3253.50
11.22.2004 - 2 - 331362.00
11.22.2004 - 2 - 120000.00
11.22.2004 - 3 - 100000.00
11.22.2004 - 3 - 10500.00
11.22.2004 - 3 - 35914.32
11.22.2004 - 4 - 17586.72
11.22.2004 - 4 - 462.00
11.22.2004 - 4 - 10686.00
11.22.2004 - 4 - 44000.00
11.22.2004 - 5 - 6099.00
11.22.2004 - 5 - 11204.52
11.22.2004 - 5 - 17821.49
11.22.2004 - 5 - 10300.00
11.22.2004 - 5 - 3000000.00
11.22.2004 - 5 - 500000.00
11.23.2004 - 1 - 50000.00
11.23.2004 - 1 - 19000.00
11.23.2004 - 1 - 10555.60
11.23.2004 - 1 - 176400.00
11.23.2004 - 2 - 1177.10
11.23.2004 - 2 - 6002.40
11.23.2004 - 2 - 479.88
11.23.2004 - 2 - 7306.10
11.23.2004 - 2 - 19200.00
11.23.2004 - 2 - 9585.00
11.23.2004 - 3 - 36640.00
11.23.2004 - 3 - 100000.00
11.23.2004 - 3 - 575000.00
11.23.2004 - 3 - 35000.00
11.23.2004 - 3 - 38000.00
11.23.2004 - 4 - 2405.45
11.23.2004 - 4 - 70886.00
11.23.2004 - 4 - 160800.00
11.23.2004 - 4 - 20504.50
11.23.2004 - 5 - 300000.00
11.23.2004 - 5 - 13066.00
11.23.2004 - 5 - 15360.00
...

1. Нужно посчитать на каждую дату сумму по каждому рейсу
должно получиться:
11.22.2004 - 1 - 173323
11.22.2004 - 2 - 517194.86
11.22.2004 - 3 - 146414.32
11.22.2004 - 4 - 72734.72
11.22.2004 - 5 - 3545425.01

11.23.2004 - 1 - 255955
... и т.д.

2. Получить среднее значение на каждый рейс за последние 10 дней.
Нампример мы берем данные с 01.08.2004 по 01.11.2004
А показать средние нужно за последние 10 дней.
20.10.2004
21.10.2004
22.10.2004 и т.д. (10 дней)

т.е. нужно расчитать с 01.08.2004 по 20.10.2004, 21.10.2004...

Никак не могу придумать алгоритм, данных много примерно 30000 записей.
 

iliah

Новичок
Astral Man
если я правильно понял и таблицы хранятся в БД
то никакого алгоритма тут не требуется
нужно просто составить корректные запросы
для 1) например
SELECT `data` , `reis`, SUM(`summa`)
FROM `tbl`
GROUP BY `data`, `reis`
 

Demiurg

Guest
ты бы хотя бы сказал, что у тебя за субд
 

Astral Man

We Will Rock You
Sam
Посмотрел, делаю вот такой запрос:
SELECT date, reis, AVG(summa) AS summa
FROM tbl
GROUP BY date, reis
ORDER BY date, reis

Этот запрос выводит среднее значение на каждый день для каждого рейса.
Нужно выводить среднее от суммы рейса за n дней
например:
11.22.2004 - 1 - 100 - 100
11.22.2004 - 2 - 200 - 200
11.23.2004 - 1 - 150 - 125
11.23.2004 - 2 - 300 - 250
11.24.2004 - 1 - 75 - 108.33
11.24.2004 - 2 - 250 - 250
11.25.2004 - 1 - 250 - 143.75
11.25.2004 - 2 - 400 - 287.5
...
Можно такое сделать? Помагите плиз, очень нужно.
Спасибо!
 

Sam

Новичок
то есть номер рейса тебе не важен? зачем тогда GROUP BY date, reis ?

просто GROUP BY date
 

Astral Man

We Will Rock You
Автор оригинала: Sam
то есть номер рейса тебе не важен? зачем тогда GROUP BY date, reis ?
Важен, я получаю суммы каждого рейса в определенном дне.
т.е. на каждый день будет 5 сумм рейсов, мне нужно вычеслить среднее, т.е. есть пять дней, мы знаем суммы первого рейса на каждый день, нужно получить среднее значение этого рейса за пять дней, и так для кажного рейса на каждый день.
Вот что должно получиться:
Дата Рейс Сум. Среднее
11.22.2004 - 1 - 100 - 100
11.22.2004 - 2 - 200 - 200
11.23.2004 - 1 - 150 - 125
11.23.2004 - 2 - 300 - 250
11.24.2004 - 1 - 75 - 108.33
11.24.2004 - 2 - 250 - 250
11.25.2004 - 1 - 250 - 143.75
11.25.2004 - 2 - 400 - 287.5
 

Sam

Новичок
ты не террорист? ) так за авиарейсы взялся...

думаю одним запросом это не сделать.
 

Astral Man

We Will Rock You
Sam
Нет, не террорист, это банковские рейсы - платежи клиентов.
Хорошо если нельзя одним запросом, как быть-то? Твои идеи?
 

Sam

Новичок
какие проблемы-то? у тебя всё есть - avg, sum, group. писать за тебя запросы я не буду - времени нет
 
Сверху