USP_DATALIST_MEMBERSHIPRENEWALREPORT
Fetches Membership Renewal information
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@STARTDATE | datetime | IN | Start Date |
@ENDDATE | datetime | IN | End Date |
@MEMBERSHIPPROGRAMID | uniqueidentifier | IN | Membership Program |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_MEMBERSHIPRENEWALREPORT
(
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@MEMBERSHIPPROGRAMID uniqueidentifier
)
as
set nocount on;
-- Validate the date range
if (@STARTDATE is null) or (@ENDDATE is null) begin
raiserror('Invalid date range.', 13, 1);
return 1;
end
-- Remove dates outside all data
declare @CURRENTDATE datetime = getdate();
declare @COMPAREDATE datetime;
select @COMPAREDATE = MIN(TRANSACTIONDATE) from dbo.MEMBERSHIPTRANSACTION;
if @STARTDATE < @COMPAREDATE
set @STARTDATE = @COMPAREDATE;
select @COMPAREDATE = MAX(TRANSACTIONDATE) from dbo.MEMBERSHIPTRANSACTION;
if @ENDDATE > @COMPAREDATE
set @ENDDATE = @COMPAREDATE;
-- Make sure this is the absolute earliest/latest time
-- to prevent bugs at the edge of the date range
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
-- Find what happened
declare @WHATHAPPENEDTABLE as table(
TRANSACTIONDATE datetime,
EXPIRATIONDATE datetime,
THISACTIONCODE tinyint,
NEXTACTIONCODE tinyint,
MEMBERSHIPID uniqueidentifier
);
insert into @WHATHAPPENEDTABLE (
TRANSACTIONDATE,
EXPIRATIONDATE,
THISACTIONCODE,
NEXTACTIONCODE,
MEMBERSHIPID
) select
MT1.TRANSACTIONDATE,
MT1.EXPIRATIONDATE,
MT1.ACTIONCODE as THISACTIONCODE,
(
select top(1)
MT2.ACTIONCODE
from
MEMBERSHIPTRANSACTION as MT2
where
MT2.MEMBERSHIPID = MT1.MEMBERSHIPID and
(
MT2.TRANSACTIONDATE > MT1.TRANSACTIONDATE or
MT2.EXPIRATIONDATE > MT1.EXPIRATIONDATE
) and
MT2.TRANSACTIONDATE between @STARTDATE and @ENDDATE
order by
MT2.TRANSACTIONDATE asc
) as NEXTACTIONCODE,
MT1.MEMBERSHIPID
from
dbo.MEMBERSHIPTRANSACTION as MT1
inner join dbo.MEMBERSHIP on MT1.MEMBERSHIPID = MEMBERSHIP.ID
where
MEMBERSHIP.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID and
MT1.TRANSACTIONDATE between @STARTDATE and @ENDDATE
and MEMBERSHIP.STATUSCODE <> 2;
declare @MONTHTABLE table(
FIRSTDAYOFTHEMONTH datetime,
LASTDAYOFTHEMONTH datetime)
declare @TEMPDATE datetime = dbo.UFN_DATE_THISMONTH_FIRSTDAY(@STARTDATE, 0)
while @TEMPDATE <= @ENDDATE
begin
declare @LASTDAYOFTHEMONTH datetime = dbo.UFN_DATE_THISMONTH_LASTDAY(@TEMPDATE, 1)
insert into @MONTHTABLE values (@TEMPDATE, @LASTDAYOFTHEMONTH)
set @TEMPDATE = dateadd(m, 1, @TEMPDATE)
end
select
cast(month(MT.FIRSTDAYOFTHEMONTH) as nvarchar(2)) + '/' + cast(year(MT.FIRSTDAYOFTHEMONTH) as nvarchar(4)) as EXPIRATIONMONTH,
(select count(MEMBERSHIP.ID)
from dbo.MEMBERSHIPTRANSACTION
inner join dbo.MEMBERSHIP on MEMBERSHIP.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
where MEMBERSHIP.EXPIRATIONDATE between MT.FIRSTDAYOFTHEMONTH and MT.LASTDAYOFTHEMONTH and
MEMBERSHIP.EXPIRATIONDATE >= @CURRENTDATE and
MEMBERSHIP.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
) as NUMEXPIRING,
(select COUNT(MT2.MEMBERSHIPID)
from @WHATHAPPENEDTABLE as MT2
where
MT2.THISACTIONCODE in (1,5) and
MT2.TRANSACTIONDATE between MT.FIRSTDAYOFTHEMONTH and MT.LASTDAYOFTHEMONTH
) as NUMRENEWED,
(select COUNT(MT2.MEMBERSHIPID)
from @WHATHAPPENEDTABLE as MT2
where
MT2.THISACTIONCODE = 2 and
MT2.TRANSACTIONDATE between MT.FIRSTDAYOFTHEMONTH and MT.LASTDAYOFTHEMONTH
) as NUMUPGRADED,
(select COUNT(MT2.MEMBERSHIPID)
from @WHATHAPPENEDTABLE as MT2
where
MT2.THISACTIONCODE = 3 and
MT2.TRANSACTIONDATE between MT.FIRSTDAYOFTHEMONTH and MT.LASTDAYOFTHEMONTH
) as NUMDOWNGRADED,
(select COUNT(MT2.MEMBERSHIPID)
from @WHATHAPPENEDTABLE as MT2
where
MT2.THISACTIONCODE = 4 and
MT2.TRANSACTIONDATE between MT.FIRSTDAYOFTHEMONTH and MT.LASTDAYOFTHEMONTH
) as NUMDROPPED,
(select count(*)
from dbo.MEMBERSHIP
inner join dbo.MEMBERSHIPTRANSACTION on MEMBERSHIP.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
where
MEMBERSHIP.EXPIRATIONDATE between MT.FIRSTDAYOFTHEMONTH and MT.LASTDAYOFTHEMONTH and
MEMBERSHIP.EXPIRATIONDATE < @CURRENTDATE and
MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID and
MEMBERSHIPTRANSACTION.ACTIONCODE <> 4 AND
(MEMBERSHIPTRANSACTION.EXPIRATIONDATE between @STARTDATE and @ENDDATE) and
not exists (
select
1
from dbo.MEMBERSHIPTRANSACTION MT
where MT.MEMBERSHIPID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
and MT.TRANSACTIONDATE between MEMBERSHIPTRANSACTION.TRANSACTIONDATE and @ENDDATE
and MT.DATEADDED > MEMBERSHIPTRANSACTION.DATEADDED
)
) as NUMLAPSED
from @MONTHTABLE as MT
order by MT.FIRSTDAYOFTHEMONTH
return 0;