UFN_CONSTITUENTRECOGNITION_COUNTBYLEVEL

Gets the number of unique constituents in a recognition level as of a given date

Return

Return Type
int

Parameters

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

Definition

Copy


            CREATE function dbo.UFN_CONSTITUENTRECOGNITION_COUNTBYLEVEL
            (
                @ASOFDATE datetime,
                @RECOGNITIONLEVELID uniqueidentifier
            ) returns int
            as
            begin

                declare @MEMBERCOUNT int

                if (select RECOGNITIONPROGRAM.TYPECODE
                    from dbo.RECOGNITIONLEVEL
                        inner join dbo.RECOGNITIONPROGRAM on RECOGNITIONLEVEL.RECOGNITIONPROGRAMID = RECOGNITIONPROGRAM.ID
                    where RECOGNITIONLEVEL.ID = @RECOGNITIONLEVELID) = 1 -- Lifetime Program: no expiration dates!

                begin
                    select @MEMBERCOUNT = count(distinct CR1.CONSTITUENTID)
                        from CONSTITUENTRECOGNITION as CR1
                        where
                            CR1.RECOGNITIONLEVELID = @RECOGNITIONLEVELID and
                            CR1.STATUSCODE = 0 and
                            CR1.ID = (select top(1) CR2.ID from dbo.CONSTITUENTRECOGNITION CR2
                                            where CR2.CONSTITUENTID = CR1.CONSTITUENTID
                                                and CR2.RECOGNITIONPROGRAMID = CR1.RECOGNITIONPROGRAMID
                                                and CR2.JOINDATE <= @ASOFDATE
                                            order by
                                                CR2.JOINDATE desc,
                                                CR2.DATEADDED desc)
                end
                else
                begin
                    if datepart(yyyy, @ASOFDATE) = 9999 -- All dates selected: find total number of members ever!

                    begin
                        select @MEMBERCOUNT = COUNT(distinct CONSTITUENTID)
                        from CONSTITUENTRECOGNITION
                        where RECOGNITIONLEVELID = @RECOGNITIONLEVELID

                    end
                    else -- Find number of members as of @ASOFDATE

                    begin
                        select @MEMBERCOUNT = COUNT(distinct CR1.CONSTITUENTID)
                        from CONSTITUENTRECOGNITION as CR1
                        where
                            CR1.RECOGNITIONLEVELID = @RECOGNITIONLEVELID and
                            CR1.EXPIRATIONDATE >= dbo.UFN_DATE_GETEARLIESTTIME(@ASOFDATE) and
                            CR1.JOINDATE = (select max(CR2.JOINDATE) from dbo.CONSTITUENTRECOGNITION CR2
                                            where CR2.CONSTITUENTID = CR1.CONSTITUENTID
                                                and CR2.RECOGNITIONPROGRAMID = CR1.RECOGNITIONPROGRAMID
                                                and CR2.JOINDATE <= @ASOFDATE)
                    end
                end

                return @MEMBERCOUNT

            end