Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Доброго времени суток!
Есть таблица "balans":
id | tekst | summ_p | summ_m | date
Мне нужно сделать запрос, который отбирал бы строки по введенному диапазону дат, и считал сумму значений отдельно столбца "summ_p" и отдельно столбца "summ_m" этих строк. У меня получается так:
SELECT
date, tekst, summ_p, summ_m, SUM(summ_p) AS p, SUM(summ_m) AS m
FROM
balans
WHERE
date BETWEEN 'a' AND 'b'
GROUP BY date
ORDER BY date DESC
В итоге получаются совершенно неадекватные результаты... Подскажите, что не так, заранее огромное спасибо!
Неактивен
Стандарт SQL вообще-то запрещает такие запросы - выборка полей не входящих в group by и не имеющих групповой функции. По сути сервер MySQL выбирает в данном случае случайные записи.
Неактивен
Проблема как я понимаю в GROUP BY date. Ваш запрос выводит сумму где дата одинаковая, то есть если таблица такая:
id tekst summ_p summ_m date
1 qwe 1 2 2009-10-14
2 sad 4 5 2009-10-12
3 qwrax 4 4 2009-10-14
4 wsaad 1 4 2009-10-14
И если сделать запрос:
SELECT
date, tekst, summ_p, summ_m, SUM(summ_p) AS p, SUM(summ_m) AS m
FROM
balans
WHERE
date BETWEEN '2009-10-12' AND '2009-10-14'
GROUP BY date
ORDER BY date DESC
То результат будет таким:
date tekst summ_p summ_m p m
2009-10-14 qwe 1 2 6 10
2009-10-12 sad 4 5 4 5
Первый запрос, который пришёл на ум и решает Вашу проблему, но вряд ли он оптимален:
SELECT
date, tekst, summ_p, summ_m,
(SELECT SUM(summ_p) FROM balans WHERE date BETWEEN 'a' AND 'b') AS p,
(SELECT SUM(summ_m) FROM balans WHERE date BETWEEN 'a' AND 'b') AS m
FROM
balans
WHERE
date BETWEEN 'a' AND 'b'
Неактивен
Я не понял, что именно требуется в исходной задаче - может нужно, чтобы в столбцах p и m значение возрастали последовательно, т.е. сумма предыдущих строк?
Неактивен
nightssss, большое спасибо, Ваш запрос идеально работает.
Неактивен
Страниц: 1