UFN_MKTSEGMENTATIONSEGMENT_GETLATESTREFRESHORCHANGEDATE
Returns the latest refresh date or change date for the segment or any of its selections.
Return
Return Type |
---|
datetime |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTID | uniqueidentifier | IN | |
@INCLUDEFILTERS | bit | IN | |
@DETECTEXTERNALCHANGES | bit | IN |
Definition
Copy
CREATE function dbo.[UFN_MKTSEGMENTATIONSEGMENT_GETLATESTREFRESHORCHANGEDATE]
(
@SEGMENTID uniqueidentifier,
@INCLUDEFILTERS bit = 0,
@DETECTEXTERNALCHANGES bit = 1
)
returns datetime
as
begin
declare @RETURNDATE datetime
declare @SEGMENTTYPECODE tinyint;
declare @DATECHANGED datetime;
declare @SEGMENTATIONID uniqueidentifier;
declare @MKTSEGMENTID uniqueidentifier;
declare @MKTSEGMENTDATEREFRESHED datetime;
declare @MKTSEGMENTDATECHANGED datetime;
declare @ADDRESSPROCESSINGOPTIONDATECHANGED datetime;
declare @PACKAGEID uniqueidentifier;
if @INCLUDEFILTERS is null
set @INCLUDEFILTERS = 0;
select
@SEGMENTATIONID = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID],
@MKTSEGMENTID = [MKTSEGMENTATIONSEGMENT].[SEGMENTID],
@SEGMENTTYPECODE = [MKTSEGMENT].[SEGMENTTYPECODE],
@PACKAGEID = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID;
if @SEGMENTTYPECODE = 3 --Revenue segments
begin
select @RETURNDATE = max([T].[DATE])
from (
--Get the last date that a record was deleted from the MKTREVENUELETTER tables for this mailing
(select max([AUDITDATE]) as [DATE] from dbo.[V_MKTREVENUELETTERAUDIT] where [MKTSEGMENTATIONID] = @SEGMENTATIONID and [MKTSEGMENTID] = @MKTSEGMENTID and [MKTPACKAGEID] = @PACKAGEID and [AUDITTYPECODE] = 2)
union all
--If no records were deleted from the MKTREVENUELETTER table, then return the minimum date instead of null
(select cast('1753-01-01T00:00:00.000' as datetime) as [DATE])
) as [T];
end
else
begin
select
@DATECHANGED = (case when [MKTSEGMENTATIONSEGMENTCACHEINFO].[RECORDCOUNTDATECACHED] is null then [MKTSEGMENTATIONSEGMENT].[DATECHANGED] else null end),
@MKTSEGMENTDATEREFRESHED = [MKTSEGMENT].[DATEREFRESHED],
@MKTSEGMENTDATECHANGED = [MKTSEGMENT].[DATECHANGED],
@ADDRESSPROCESSINGOPTIONDATECHANGED = [ADDRESSPROCESSINGOPTION].[DATECHANGED]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
left outer join dbo.[ADDRESSPROCESSINGOPTION] on [ADDRESSPROCESSINGOPTION].[ID] = (case when [MKTSEGMENTATIONSEGMENT].[OVERRIDEADDRESSPROCESSING] = 1 then [MKTSEGMENTATIONSEGMENT].[ADDRESSPROCESSINGOPTIONID] else [MKTSEGMENTATION].[ADDRESSPROCESSINGOPTIONID] end)
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
left join dbo.[MKTSEGMENTATIONSEGMENTCACHEINFO] on [MKTSEGMENTATIONSEGMENTCACHEINFO].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID;
--Get the latest date that the segment could have been modified...
select @RETURNDATE = max([T].[DATE])
from (
--Get the date changed for the mailing segment
(select @DATECHANGED as [DATE])
-- this is deliberately no longer being checked, now that clients can effectively lock down a marketing effort pre-activation
union all
--Get the refresh date of the global segment
(select case when @DETECTEXTERNALCHANGES = 1 then @MKTSEGMENTDATEREFRESHED else cast('1753-01-01T00:00:00.000' as datetime) end)
union all
--Get the date changed for the global segment in case they add or remove a selection
-- this may not be checked, now that clients want to be able to effectively lock down a marketing effort pre-activation
(select case when @DETECTEXTERNALCHANGES = 1 then @MKTSEGMENTDATECHANGED else cast('1753-01-01T00:00:00.000' as datetime) end)
union all
--Get the date changed for all the selections in the segment (determines when each selection was last refreshed)
-- this may not be checked, now that clients want to be able to effectively lock down a marketing effort pre-activation
(select case when @DETECTEXTERNALCHANGES = 1 then max([DATECHANGED]) else cast('1753-01-01T00:00:00.000' as datetime) end from dbo.[IDSETREGISTER] where [ID] in (select [SELECTIONID] from dbo.[MKTSEGMENTSELECTION] where [SEGMENTID] = @MKTSEGMENTID))
union all
--Get the date changed for the address processing option set selected for the mailing
-- this may not be checked, now that clients want to be able to effectively lock down a marketing effort pre-activation
(select case when @DETECTEXTERNALCHANGES = 1 then @ADDRESSPROCESSINGOPTIONDATECHANGED else cast('1753-01-01T00:00:00.000' as datetime) end)
) as [T];
--Get the latest date that either the segment or any filters on the mailing could have been modified...
if @INCLUDEFILTERS = 1
begin
select @RETURNDATE = max([T].[DATE])
from (
--Get the segment's latest date from above
(select @RETURNDATE as [DATE])
union all
--Get the date changed for all the selections in the universe/exclusions...
(select max([DATECHANGED]) from dbo.[MKTSEGMENTATIONFILTERSELECTION] where [SEGMENTATIONID] = @SEGMENTATIONID)
union all
--Get the last date that a selection in the universe/exclusions was deleted...
(select max([AUDITDATE]) from dbo.[MKTSEGMENTATIONFILTERSELECTIONAUDIT] where [SEGMENTATIONID] = @SEGMENTATIONID and [AUDITTYPECODE] = 2)
union all
--Get the date changed for all the selections in the universe/exclusions (determines when each selection was last refreshed)
-- this may not be checked, now that clients want to be able to effectively lock down a marketing effort pre-activation
(select case when @DETECTEXTERNALCHANGES = 1 then max([DATECHANGED]) else cast('1753-01-01T00:00:00.000' as datetime) end from dbo.[IDSETREGISTER] where [ID] in (select [SELECTIONID] from dbo.[MKTSEGMENTATIONFILTERSELECTION] where [SEGMENTATIONID] = @SEGMENTATIONID))
union all
--Get the date changed for all the previous mailing exclusions...
(select max([DATECHANGED]) from dbo.[MKTSEGMENTATIONFILTERSEGMENTATION] where [SEGMENTATIONID] = @SEGMENTATIONID)
union all
--Get the last date that a previous mailing exclusion was deleted...
(select max([AUDITDATE]) from dbo.[MKTSEGMENTATIONFILTERSEGMENTATIONAUDIT] where [SEGMENTATIONID] = @SEGMENTATIONID and [AUDITTYPECODE] = 2)
) as [T];
end
end
return @RETURNDATE;
end