Как запросить группу по месяцам в году
Я использую Oracle SQL Developer.
По существу, у меня есть таблица картинок, которая содержит столбцы:
[DATE_CREATED(дата), NUM_of_PICTURES (int)]
И если я сделаю select *, я получу результат, подобный:
01-May-12 12
02-May-12 15
03-May-12 09
...
...
01-Jun-12 20
...
etc.
Я пытаюсь объединить эти суммы изображений в ежемесячные числа вместо ежедневных.
Я пытался сделать что-то вроде:
select Month(DATE_CREATED), sum(Num_of_Pictures))
from pictures_table
group by Month(DATE_CREATED);
Это приводит к ошибке:
ORA-00904: "MONTH": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 5 Column: 9
Я ошибся с функцией месяца?
4 ответов:
Я был бы склонен включить год в выпуск. Один из способов:
select to_char(DATE_CREATED, 'YYYY-MM'), sum(Num_of_Pictures) from pictures_table group by to_char(DATE_CREATED, 'YYYY-MM') order by 1Другой способ (более стандартный SQL):
select extract(year from date_created) as yr, extract(month from date_created) as mon, sum(Num_of_Pictures) from pictures_table group by extract(year from date_created), extract(month from date_created) order by yr, mon;Запомните порядок по, так как вы предположительно хотите, чтобы они были упорядочены, и нет никакой гарантии относительно порядка, в котором строки возвращаются после группы by.
Для Oracle:
select EXTRACT(month from DATE_CREATED), sum(Num_of_Pictures) from pictures_table group by EXTRACT(month from DATE_CREATED);
Для MS SQL вы можете сделать это.
select CAST(DATEPART(MONTH, DateTyme) as VARCHAR) +'/'+ CAST(DATEPART(YEAR, DateTyme) as VARCHAR) as 'Date' from #temp group by Name, CAST(DATEPART(MONTH, DateTyme) as VARCHAR) +'/'+ CAST(DATEPART(YEAR, DateTyme) as VARCHAR)
Вы можете использовать:
select FK_Items,Sum(PoiQuantity) Quantity from PurchaseOrderItems POI left join PurchaseOrder PO ON po.ID_PurchaseOrder=poi.FK_PurchaseOrder group by FK_Items,DATEPART(MONTH, TransDate)
Comments