Synopsis:
If using Oracle use the trunc and numtoyminterval functions; if using SQL Server use the datediff function.
Oracle Month to Date:
SELECT sum(TRANSACTION_AMOUNT) FROM TRANSACTIONS WHERE TRANSACTION_DATE BETWEEN trunc(sysdate, 'MONTH') and sysdate
Oracle Year to Date:
SELECT sum(TRANSACTION_AMOUNT) FROM TRANSACTIONS WHERE TRANSACTION_DATE BETWEEN trunc(sysdate, 'YEAR') and sysdate
Oracle Rolling 12 Months:
select sum(TRANSACTION_AMOUNT) FROM TRANSACTIONS WHERE TRANSACTION_DATE between trunc(sysdate - numtoyminterval(12, 'MONTH'), 'MONTH') and sysdate
Oracle Prior Year:
SELECT sum(TRANSACTION_AMOUNT) FROM TRANSACTIONS WHERE trunc(TRANSACTION_DATE, 'YEAR') = trunc(sysdate - numtoyminterval(1, 'YEAR'), 'YEAR')
SQL Server Month to Date:
SELECT sum(TRANSACTION_AMOUNT) FROM TRANSACTIONS WHERE datediff(month, TRANSACTION_DATE, getdate()) = 0 AND TRANSACTION_DATE <= getdate()
SQL Server Year to Date:
SELECT sum(TRANSACTION_AMOUNT) FROM TRANSACTIONS WHERE datediff(year, TRANSACTION_DATE, getdate()) = 0 AND TRANSACTION_DATE <= getdate()
SQL Server Rolling 12 Months:
SELECT sum(TRANSACTION_AMOUNT) FROM TRANSACTIONS WHERE datediff(month, TRANSACTION_DATE, getdate()) <= 12 AND TRANSACTION_DATE <= getdate()
SQL Server Prior Year:
SELECT sum(TRANSACTION_AMOUNT) FROM TRANSACTIONS WHERE datediff(year, TRANSACTION_DATE, getdate()) = 1
Hi Craig,
ReplyDeleteThanks for this great blog!
Thanks,
Craig P.
Nice. I am interested in the Oracle piece. Instead of sysdate, how could I plug in a specific date or group by week, such that I have MTD, YTD, Prior Year listed for each week of a given year?
ReplyDeleteHi Craig,
ReplyDeleteThanks! This helped me a lot!
Awesome dude, very helpful.
ReplyDeleteThanks man. Have been searching for this all morning and people make it way to complicated. Appreicate the short and simple.
ReplyDeletehow to find rolling 13 weeks data based on week ending date i.e. sunday
ReplyDeleteis there anyway of working out MTD prior year?
ReplyDelete