TSQL: Specifying days within a year and based on a certain number of years previous

Hello:

The first piece of code below shows credit memos older than five years with an amount greater than 0, while the second piece of code shows credit memos with an amount greater than 0 but between 181 and 365 days from the credit memo's date.

This means that the second piece of code shows data only from the past year.  So, the first piece of code shows credit memos that are older than five years--not just credit memos between 181 and 365 days of this past year.

I need to be able to show the second piece of code at any point in time that I want within the past five years.

So, if I want to see credit memos in the "[181 - 365 Days]" bucket 1 year ago, I want to see that.  If I want to see credit memos from within that same bucket 4 years ago, I want to see that.

Is there a way, through perhaps a common table expression, that I can accomplish this?

Below are screenshots of what data displays when I run the first and second pieces of code, respectively.

Thanks, for the help!  It's much appreciated!

John


--credit memos older than five years whose balance is greater than zero 
select RM20101.CUSTNMBR as [CUSTOMER ID], RM00101.CUSTNAME AS [NAME], SUM(RM20101.CURTRXAM * - 1) AS [AMT REMAINING]
from RM20101 
INNER JOIN RM00101 on RM20101.CUSTNMBR = RM00101.CUSTNMBR
where RMDTYPAL = 7 and DATEDIFF(yyyy, RM20101.DOCDATE, GETDATE()) > 5 and RM20101.CURTRXAM > 0
GROUP BY RM20101.CUSTNMBR, RM00101.CUSTNAME

Open in new window



--credit memos whose amount remains for the [181-365 Days] bucket within this year
SELECT RM20101.CUSTNMBR as [CUSTOMER ID], RM00101.CUSTNAME AS [NAME], SUM(RM20101.CURTRXAM * - 1) AS [AMT REMAINING], 
SUM(CASE WHEN (DATEDIFF(dd, RM20101.DOCDATE, GETDATE()) > 180 
AND DATEDIFF(dd, RM20101.DOCDATE, GETDATE()) <= 365)
THEN RM20101.CURTRXAM * - 1 ELSE 0 END) AS [181-365 DAYS]
FROM RM20101 
INNER JOIN RM00101 ON RM20101.CUSTNMBR = RM00101.CUSTNMBR 
WHERE (RM20101.VOIDSTTS = 0) AND (RM20101.CURTRXAM > 0) AND RM20101.RMDTYPAL = 7
and DATEDIFF(dd, RM20101.DOCDATE, GETDATE()) > 180 
and DATEDIFF(dd, RM20101.DOCDATE, GETDATE()) <= 365
GROUP BY RM20101.CUSTNMBR, RM00101.CUSTNAME

Open in new window



FirstSecond
John EllisAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Brian ChanDBACommented:
Would you mean this? I just mimic your logic from your second query.....

SELECT 
	RM20101.CUSTNMBR as [CUSTOMER ID]
	, RM00101.CUSTNAME AS [NAME]
	, SUM(RM20101.CURTRXAM * - 1) AS [AMT REMAINING]
	, SUM(	
			CASE WHEN (DATEDIFF(yyyy, RM20101.DOCDATE, GETDATE()) > 5 )
				THEN RM20101.CURTRXAM * - 1
			ELSE 0 END
		) AS [Past 5 years]
FROM RM20101 
	INNER JOIN RM00101 ON RM20101.CUSTNMBR = RM00101.CUSTNMBR
WHERE RMDTYPAL = 7
	AND RM20101.CURTRXAM > 0
	AND (RM20101.VOIDSTTS = 0) 
	AND DATEDIFF(yyyy, RM20101.DOCDATE, GETDATE()) > 5 
GROUP BY RM20101.CUSTNMBR, RM00101.CUSTNAME

Open in new window

0
SharathData EngineerCommented:
Multiple your bucket with a 1 or 2 or 3 to go back 1/2/3 years.
DECLARE @year INT
SELECT @year = 1;
--credit memos whose amount remains for the [181-365 Days] bucket within this year
SELECT RM20101.CUSTNMBR as [CUSTOMER ID], RM00101.CUSTNAME AS [NAME], SUM(RM20101.CURTRXAM * - 1) AS [AMT REMAINING], 
SUM(CASE WHEN (DATEDIFF(dd, RM20101.DOCDATE, GETDATE()) > 180 
AND DATEDIFF(dd, RM20101.DOCDATE, GETDATE()) <= 365)
THEN RM20101.CURTRXAM * - 1 ELSE 0 END) AS [181-365 DAYS]
FROM RM20101 
INNER JOIN RM00101 ON RM20101.CUSTNMBR = RM00101.CUSTNMBR 
WHERE (RM20101.VOIDSTTS = 0) AND (RM20101.CURTRXAM > 0) AND RM20101.RMDTYPAL = 7
and DATEDIFF(dd, RM20101.DOCDATE, GETDATE()) > @year*180 
and DATEDIFF(dd, RM20101.DOCDATE, GETDATE()) <= @year*365
GROUP BY RM20101.CUSTNMBR, RM00101.CUSTNAME

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
John EllisAuthor Commented:
Thank you, both!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft SQL Server 2008

From novice to tech pro — start learning today.