22:51

Разница между мной и сумасшедшим в том, что я не сумасшедший.(с)
Добрый вечер.
Я к вам не с пустыми руками, а с тупым вопросом. :kto:
Имеется: delphi7, quickreport5 и простой select-запрос, в котором выбираются некоторые данные, сгруппированные по дате. Дата идет в формате dd.mm.yyyy. А теперь, внимание, вопрос: как сделать в отчете группировку по месяцам? То есть чтобы выводились данные не за конкретное число месяца, а за весь месяц в сумме?
Понимаю, что вопрос нубский, но надеюсь, поможете. :smiletxt:

Комментарии
07.03.2009 в 23:22

"Да?" - сказал Волк и сломал ей ногу
А база какая? От этого конкетный синтаксис зависит

А вобще - SELECT (что-то1, что-то2, что-то3) FROM таблица GROUP BY ВЗЯТЬ_МЕСЯЦ(имя_колонки_с_датой)

Вместо что-тоX - группируемая колонка или результат аггрегатной функции
ВЗЯТЬ_МЕСЯЦ - функция, которая из даты возвращает угадайте-что

И причём тут формат даты? Они что, в строковом виде хранятся?
07.03.2009 в 23:36

Что наша жизнь - игра!
Muraki

Выложи сюда свой запрос без группировки, а то объяснять на абстрактных понятиях в данном случае это лишнее.
Тебе в принципе нужно просто даты округлить до MM.YYYY и по этому группировать.
07.03.2009 в 23:39

Разница между мной и сумасшедшим в том, что я не сумасшедший.(с)
jazzcat
База из двух таблиц. В одной - список фирм, в другой - курсы акций по дням.
СУБД вроде Paradox.

Нет, даты не в строковом формате, естественно, это так, на всякий случай.=)
07.03.2009 в 23:50

Разница между мной и сумасшедшим в том, что я не сумасшедший.(с)
Tremi
запрос самый простой, что-то вроде:
SELECT Kurs.Date, Firm.Name, Kurs.Kurs_pokupki, Kurs.Kurs_Prodazhi
FROM Kurs, Firm
GROUP BY ...
ORDER BY Kurs.Date

нужно просто даты округлить до MM.YYYY и по этому группировать
а это как?)
08.03.2009 в 00:15

Что наша жизнь - игра!
Muraki

Попробуй GROUP BY TRUNC(Kurs.Date, 'МONTH')
Просто не помню действуют ли функции в group by, если нет, то напиши с подзапросом.
08.03.2009 в 00:27

Разница между мной и сумасшедшим в том, что я не сумасшедший.(с)
Tremi
нет, это не действует
а по поводу подзапроса я уже и не знаю, что сообразить(
08.03.2009 в 00:30

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
В каком формате хранится дата? Если в формате DateTime, то запрос должен выглядеть как-то так:

SELECT DATEPART(month, Kurs.Date), DATEPART(year, Kurs.Date), Firm.Name, AVG(Kurs.Kurs_pokupki), AVG(Kurs.Kurs_Prodazhi)
FROM Kurs, Firm
GROUP BY Firm.Name, DATEPART(year, Kurs.Date), DATEPART(month, Kurs.Date)
ORDER BY DATEPART(year, Kurs.Date), DATEPART(month, Kurs.Date)

Это верно по крайней мере для MS SQL. Если нужно выбирать и по дням, и с группировкой по месяцам (в одном запросе), то можно завести что-то типа этого:

SELECT DATEPART(month, Kurs.Date), DATEPART(year, Kurs.Date), Kurs.Date, Firm.Name, Kurs.Kurs_pokupki, Kurs.Kurs_Prodazhi
FROM Kurs, Firm
UNION ALL
SELECT DATEPART(month, Kurs.Date), DATEPART(year, Kurs.Date), NULL, Firm.Name, AVG(Kurs.Kurs_pokupki), AVG(Kurs.Kurs_Prodazhi)
FROM Kurs, Firm
GROUP BY Firm.Name, DATEPART(year, Kurs.Date), DATEPART(month, Kurs.Date)
ORDER BY DATEPART(year, Kurs.Date), DATEPART(month, Kurs.Date)

Опять же, это верно для MSSQL.

Если дата хранится в формате varchar (что, на мой взгляд, неразумно в том числе с точки зрения сортировки), то DATEPART заменяется на SUBSTRING для соответствующей части строки.

Кстати, у тебя Krus и Firm как связаны? Судя по запросу, ты делаешь CROSS JOIN. А зачем?
08.03.2009 в 00:50

"Да?" - сказал Волк и сломал ей ногу
Не все СУБД поддерживают такие запросы. По крайней мере помнится мне, что Оракл ругался - если есть GROUP BY, то селектить можно только поля, по которым проводится группировка, или же результаты аггрегирующих функций.
08.03.2009 в 01:02

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
jazzcat, ну так это везде так. В моем запросе - тоже. Присмотрись по-внимательнее. ;)
08.03.2009 в 01:15

"Да?" - сказал Волк и сломал ей ногу
а, ок. звиняй, прочитал по диагоняли :)
08.03.2009 в 13:07

Разница между мной и сумасшедшим в том, что я не сумасшедший.(с)
invalid use of keyword на каждой строке с month и year :hmm:
08.03.2009 в 21:38

"Да?" - сказал Волк и сломал ей ногу
Ну дык это - другая СУБД = другой синтаксис
Доки по своей в руки и вперёд :)