UFN_MEMBER_MEMBERCOUNT_BYLEVEL

Calculates the number of members by level.

Return

Return Type
int

Parameters

Parameter Parameter Type Mode Description
@MEMBERSHIPLEVELID uniqueidentifier IN
@ASOFDATE datetime IN

Definition

Copy


        CREATE function dbo.UFN_MEMBER_MEMBERCOUNT_BYLEVEL
        (
            @MEMBERSHIPLEVELID uniqueidentifier,
            @ASOFDATE datetime
        )
        returns integer
        with execute as caller
        as begin

            declare @ACTIVEMEMBERSCOUNT integer

            if datepart(year, @ASOFDATE) < 5000
            begin
                set @ASOFDATE = dbo.UFN_DATE_GETLATESTTIME(@ASOFDATE);

                select @ACTIVEMEMBERSCOUNT = count(distinct M.ID)
                from dbo.MEMBER M
                inner join dbo.MEMBERSHIP MS
                    on MS.ID = M.MEMBERSHIPID
                inner join dbo.MEMBERSHIPTRANSACTION MT
                    on M.MEMBERSHIPID = MT.MEMBERSHIPID
                where @MEMBERSHIPLEVELID = MT.MEMBERSHIPLEVELID
                    and MT.TRANSACTIONDATE < @ASOFDATE
                    and M.ISDROPPED = 0
                    and MS.STATUSCODE in (0, 1)
                    and (MT.ID =
                            (select top 1 MT2.ID
                                from dbo.MEMBERSHIPTRANSACTION MT2
                                where MT2.TRANSACTIONDATE < @ASOFDATE
                                and MT2.MEMBERSHIPID = MT.MEMBERSHIPID
                                order by MT2.DATEADDED desc))
                    and MT.ACTIONCODE <> 4
                    and (
                        MS.EXPIRATIONDATE > @ASOFDATE or 
                        (
                            select MLT.TERMCODE
                            from dbo.MEMBERSHIPLEVELTERM as MLT
                            where MS.MEMBERSHIPLEVELTERMID = MLT.ID
                        ) = 6 --Is lifetime membership

                    );
            end
            else
            begin
                select @ACTIVEMEMBERSCOUNT = count(distinct M.ID)
                from dbo.MEMBER M
                inner join dbo.MEMBERSHIP MS
                    on MS.ID = M.MEMBERSHIPID
                where @MEMBERSHIPLEVELID = MS.MEMBERSHIPLEVELID
                    and M.ISDROPPED = 0
                    and MS.STATUSCODE = 0
            end    


            return @ACTIVEMEMBERSCOUNT

        end