Как запросить группу за месяц в год
Я использую 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.
Я пытаюсь объединить эти суммы изображений в числа MONTHLY вместо DAILY.
Я пробовал сделать что-то вроде:
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
У меня есть функция месяца неправильно?
Ответы
Ответ 1
Я был бы склонен включать год в выход. Один из способов:
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;
Запомните порядок, так как вы, вероятно, хотите их по порядку, и нет гарантии о том, что строки возвращаются после группы.
Ответ 2
Для Oracle:
select EXTRACT(month from DATE_CREATED), sum(Num_of_Pictures)
from pictures_table
group by EXTRACT(month from DATE_CREATED);
Ответ 3
Для 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)
Ответ 4
Вы можете использовать:
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)