Reputation: 897
I am using Oracle SQL Developer. I essentially have a table of pictures that holds the columns:
[DATE_CREATED(date), NUM_of_PICTURES(int)]
and if I do a select *, I would get an output similar to:
01-May-12 12
02-May-12 15
03-May-12 09
...
...
01-Jun-12 20
...
etc.
I am trying to aggregate these sums of pictures into MONTHLY numbers instead of DAILY.
I've tried doing something like:
select Month(DATE_CREATED), sum(Num_of_Pictures))
from pictures_table
group by Month(DATE_CREATED);
This outputs an error:
ORA-00904: "MONTH": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 5 Column: 9
Do I have the Month function wrong?
Upvotes: 65
Views: 277317
Reputation: 117
I am doing like this in MSSQL
Getting Monthly Data:
SELECT YEAR(DATE_CREATED) [Year], MONTH(DATE_CREATED) [Month],
DATENAME(MONTH,DATE_CREATED) [Month Name], SUM(Num_of_Pictures) [Pictures Count]
FROM pictures_table
GROUP BY YEAR(DATE_CREATED), MONTH(DATE_CREATED),
DATENAME(MONTH, DATE_CREATED)
ORDER BY 1,2
Getting Monthly Data using PIVOT:
SELECT *
FROM (SELECT YEAR(DATE_CREATED) [Year],
DATENAME(MONTH, DATE_CREATED) [Month],
SUM(Num_of_Pictures) [Pictures Count]
FROM pictures_table
GROUP BY YEAR(DATE_CREATED),
DATENAME(MONTH, DATE_CREATED)) AS MontlySalesData
PIVOT( SUM([Pictures Count])
FOR Month IN ([January],[February],[March],[April],[May],
[June],[July],[August],[September],[October],[November],
[December])) AS MNamePivot
Upvotes: -1
Reputation: 1271003
I would be inclined to include the year in the output. One way:
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
Another way (more standard 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;
Remember the order by, since you presumably want these in order, and there is no guarantee about the order that rows are returned in after a group by.
Upvotes: 143
Reputation: 4354
For Oracle:
select EXTRACT(month from DATE_CREATED), sum(Num_of_Pictures)
from pictures_table
group by EXTRACT(month from DATE_CREATED);
Upvotes: 22
Reputation: 1
You can use:
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)
Upvotes: -3
Reputation: 2472
For MS SQL you can do this.
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)
Upvotes: -3