Вопрос о группе SQL по дате

Я пытаюсь сделать отчет, но у меня проблемы с моим заклятым врагом SQL.

У меня есть таблица, в которой хранится дата закрытия транзакции.

Я хочу знать, сколько транзакций в месяц было, поэтому я сделал:

SELECT trunct( closedate, 'MONTH' ) FROM  MY_TRANSACTIONS 

Я использую оракул.

Я получаю такой список:

2002-09-01 00:00:00.0
2002-09-01 00:00:00.0
...
2002-10-01 00:00:00.0
2002-10-01 00:00:00.0
...
2002-11-01 00:00:00.0
2002-11-01 00:00:00.0

и т. д.

Поэтому я подумал: «Если я добавлю COUNT() в select и GROUP BY в конце оператора, это должно сработать», но это не так. Я предполагаю, что каждая запись обрабатывается как другое значение: -S

Любая подсказка, пожалуйста?

Спасибо.


person OscarRyz    schedule 06.04.2009    source источник
comment
@Joel: Спасибо за повторные теги. Это действительно PL-SQL?   -  person OscarRyz    schedule 06.04.2009
comment
@Oscar: Использование TRUNC() таким образом характерно для Oracle. Но проблема, которую вы видите с GROUP BY, не зависит от поставщика; так работает любая SQL-совместимая реализация.   -  person Bill Karwin    schedule 06.04.2009


Ответы (1)


Вы хотите сгруппировать по всем полям без агг. И вы не хотите обрезать дату, вам нужна месячная часть даты.

так что-то вроде

выберите to_char(datefield, 'Месяц'), count(*) from... group by to_char(datefield, 'Месяц');

person Shea    schedule 06.04.2009
comment
to_char(datefield, 'Месяц') должен сделать это - person Shea; 06.04.2009
comment
@Arnshea: Да (частично), потому что я думаю, что это сумма всех декабрей прошлых лет... - person OscarRyz; 06.04.2009
comment
Попробуйте to_char (поле даты, 'МЕСЯЦ ГГГГ') - person Eric Petroelje; 06.04.2009
comment
Большое спасибо... Я делал (по интуиции) именно то, что Эрик. :) - person OscarRyz; 06.04.2009
comment
Это лучше сделать: TRUNC(datefield, 'Mon'), чтобы обрезать дни, часы, минуты, секунды от даты. - person WW.; 07.04.2009
comment
TRUNC будет немного более эффективным, но тогда вы, вероятно, все равно захотите отформатировать вывод... - person Jeffrey Kemp; 25.05.2009