Skip to content

Commit 39c266e

Browse files
committed
Update omd.GetConsistencyDateTime.sql
1 parent 6481a99 commit 39c266e

File tree

1 file changed

+30
-25
lines changed

1 file changed

+30
-25
lines changed

020_DIRECT_Framework/Direct_Framework/Functions/omd.GetConsistencyDateTime.sql

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
RETURNS DATETIME2(7) AS
33
BEGIN
44

5-
-- Input variables
5+
-- Input variables, for debugging only and commented out
66
--DECLARE @MeasurementDate DATETIME2(7) = GETDATE();
77
--DECLARE @Table_List VARCHAR(MAX) ='';
8+
89
-- Output variables
910
DECLARE @Output DATETIME2(7);
11+
1012
-- Local variables
1113
DECLARE @EligibleWindowsCount int = 0;
1214
DECLARE @MaxDateTime DATETIME2(7);
@@ -29,10 +31,12 @@ AS
2931
, table_names
3032
AS
3133
(
32-
SELECT DISTINCT DATA_STORE_CODE = substring(@Table_List, starting_position, CASE WHEN end_position = 0
33-
THEN len(@Table_List)
34-
ELSE end_position - starting_position
35-
END)
34+
SELECT DISTINCT DATA_STORE_CODE = substring(@Table_List,
35+
starting_position,
36+
CASE WHEN end_position = 0
37+
THEN len(@Table_List)
38+
ELSE end_position - starting_position
39+
END)
3640
FROM cteSplits
3741
),
3842
---- Calculate the output now the individual tables are available
@@ -43,6 +47,8 @@ FROM (
4347
SELECT
4448
sct.MODULE_INSTANCE_ID,
4549
modinst.MODULE_ID,
50+
module.MODULE_CODE,
51+
module.DATA_OBJECT_TARGET,
4652
modinst.EXECUTION_STATUS_CODE,
4753
sct.INTERVAL_START_DATETIME,
4854
sct.INTERVAL_END_DATETIME,
@@ -54,42 +60,41 @@ FROM (
5460
FROM omd.MODULE_INSTANCE modinst
5561
JOIN omd.SOURCE_CONTROL sct ON modinst.MODULE_INSTANCE_ID = sct.MODULE_INSTANCE_ID
5662
JOIN omd.MODULE module ON modinst.MODULE_ID = module.MODULE_ID
63+
JOIN -- Only join modules that relate to the intended target tables.
64+
(
65+
SELECT MODULE_ID
66+
FROM omd.MODULE
67+
INNER JOIN table_names ON LTRIM(table_names.DATA_STORE_CODE) = omd.MODULE.DATA_OBJECT_TARGET
68+
) module_tables
69+
ON modinst.MODULE_ID = module_tables.MODULE_ID
5770
WHERE 1=1
5871
AND module.INACTIVE_INDICATOR='N'
5972
AND modinst.EXECUTION_STATUS_CODE = 'S'
6073
AND sct.INTERVAL_END_DATETIME <= @MeasurementDate
61-
-- AND modinst.MODULE_ID IN
62-
-- (
63-
--SELECT omd.MODULE_DATA_STORE.MODULE_ID
64-
--FROM dbo.OMD_DATA_STORE
65-
-- INNER JOIN table_names ON LTRIM(table_names.DATA_STORE_CODE) = OMD_DATA_STORE.DATA_STORE_CODE
66-
-- INNER JOIN dbo.OMD_MODULE_DATA_STORE ON OMD_MODULE_DATA_STORE.DATA_STORE_ID = OMD_DATA_STORE.DATA_STORE_ID
67-
-- )
6874
) sub
6975
WHERE ROW_ORDER=1
70-
), ELIGIBLE_WINDOWS AS
76+
)
77+
, ELIGIBLE_WINDOWS AS
7178
(
7279
SELECT
7380
SUM(CHANGE_DELTA_INDICATOR) AS ELIGIBILITY_COUNT,
81+
(SELECT COUNT (DISTINCT DATA_OBJECT_TARGET) FROM ConsistencyCTE) AS MODULE_TABLE_COUNT,
7482
MAX(INTERVAL_END_DATETIME) AS MAX_END_DATETIME,
75-
MAX(MODULE_INSTANCE_ID) AS MAX_MODULE_INSTANCE_ID
83+
MAX(MODULE_INSTANCE_ID) AS MAX_MODULE_INSTANCE_ID,
84+
(SELECT COUNT(*) FROM table_names) AS TABLE_COUNT
7685
FROM ConsistencyCTE
7786
)
78-
SELECT @Output =
79-
MIN
87+
SELECT
88+
@Output = MIN
8089
(CASE
81-
WHEN ELIGIBILITY_COUNT = 0 THEN MAX_END_DATETIME
82-
WHEN ELIGIBILITY_COUNT != 0 AND CHANGE_DELTA_INDICATOR = 1 THEN INTERVAL_END_DATETIME
90+
WHEN MODULE_TABLE_COUNT < TABLE_COUNT THEN NULL -- Not all tables have been hit with records yet, only relevant when starting from scratch / drop everything.
91+
WHEN ELIGIBILITY_COUNT = 0 THEN MAX_END_DATETIME -- If the eligibility count is 0 then MAX(INTERVAL_END_DATETIME), because there are no changes at all to be detected.
92+
WHEN ELIGIBILITY_COUNT != 0 AND CHANGE_DELTA_INDICATOR = 1 THEN INTERVAL_END_DATETIME-- If the eligbility count != 0 then remove all rows where START_DATETIME=END_DATETIME and select the MIN(INTERVAL_END_DATETIME) from this result
8393
END)
84-
--MIN(CASE
85-
-- WHEN ELIGIBILITY_COUNT = 0 THEN MAX_MODULE_INSTANCE_ID
86-
-- WHEN ELIGIBILITY_COUNT != 0 AND CHANGE_DELTA_INDICATOR = 1 THEN MODULE_INSTANCE_ID
87-
--END) AS CONSISTENCY_MODULE_INSTANCE_ID
8894
FROM ConsistencyCTE
8995
CROSS JOIN ELIGIBLE_WINDOWS
90-
-- If the eligibility count is 0 then MAX(INTERVAL_END_DATETIME)
91-
-- If the eligbility count != 0 then remove all rows where START_DATETIME=END_DATETIME and select the MIN(INTERVAL_END_DATETIME) from this result
9296

9397

9498
RETURN @Output;
95-
END;
99+
100+
END;

0 commit comments

Comments
 (0)