I'm having trouble using the loop in the "where" part. Basically, I need my "END_DATE" to be every month's last day. I tried a dumb way by giving all those dates like this
WHERE
ATKR.BEGIN_DATE>='2017-1-1' and (ATKR.END_DATE = '2018-1-31' or ATKR.END_DATE = '2018-2-28' or ATKR.END_DATE = '2018-3-31'or
ATKR.END_DATE = '2018-4-30' or ATKR.END_DATE = '2018-5-31' or ATKR.END_DATE = '2018-6-30' or
ATKR.END_DATE = '2018-7-31' or ATKR.END_DATE = '2018-8-31' or ATKR.END_DATE = '2018-9-30' or
ATKR.END_DATE = '2018-10-31' or ATKR.END_DATE = '2018-11-30'or ATKR.END_DATE = '2018-12-31'or
ATKR.END_DATE = '2019-1-31' or ATKR.END_DATE = '2019-2-28' or ATKR.END_DATE = '2019-3-31'or
ATKR.END_DATE = '2019-4-30' or ATKR.END_DATE = '2019-5-31' or ATKR.END_DATE = '2019-6-30' or
ATKR.END_DATE = '2019-7-31' or ATKR.END_DATE = '2019-8-31' or ATKR.END_DATE = '2019-9-30' or
ATKR.END_DATE = '2019-10-31' or ATKR.END_DATE = '2019-11-30'or ATKR.END_DATE = '2019-12-31'or
ATKR.END_DATE = '2020-1-31' or ATKR.END_DATE = '2020-2-29' or ATKR.END_DATE = '2020-3-31'or
ATKR.END_DATE = '2020-4-30' or ATKR.END_DATE = '2020-5-31')
However, I think I can do a loop like this to get all these dates
declare @interimDate as datetime
declare @i as Int
set @i=1;
WHILE @i <30
BEGIN
SET @interimDate = DATEADD(month,((YEAR(getdate())-1900)*12) + MONTH(getdate())-@i,-1);
PRINT @interimDate;
set @i=@i+1;
END;
Can someone help me to combine them? Thank you.
WHILEis a logical flow operator, it doesn't go in a statement. What are you actually trying to achieve here?