add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE temp (
[TabName] VARCHAR(255),
[ID] VARCHAR(255),
[AsOfDate] DATE)

INSERT INTO temp VALUES
('TAB1', 'C103', '2019-01-05'),
('TAB1', 'C103', '2019-01-06'),
('TAB2', 'C103', '2019-01-06'),
('TAB2', 'C103', '2019-01-07'),
('TAB1', 'C103', '2019-01-09'),
('TAB1', 'C104', '2019-01-06'),
('TAB1', 'C104', '2019-01-08')
7 rows affected
SELECT
TabName,
Id,
AsOfDate,
RANK() OVER (ORDER BY TabName, Id) AS Grp,
ROW_NUMBER() OVER (PARTITION BY TabName, Id ORDER BY AsOfDate) AS Rn
FROM Temp
TabName Id AsOfDate Grp Rn
TAB1 C103 05/01/2019 00:00:00 1 1
TAB1 C103 06/01/2019 00:00:00 1 2
TAB1 C103 09/01/2019 00:00:00 1 3
TAB1 C104 06/01/2019 00:00:00 4 1
TAB1 C104 08/01/2019 00:00:00 4 2
TAB2 C103 06/01/2019 00:00:00 6 1
TAB2 C103 07/01/2019 00:00:00 6 2
;WITH CTE AS (
SELECT
TabName,
Id,
AsOfDate,
RANK() OVER (ORDER BY TabName, Id) AS Grp,
ROW_NUMBER() OVER (PARTITION BY TabName, Id ORDER BY AsOfDate) AS Rn
FROM Temp
), CTE2 AS
(
SELECT c1.TabName,
c1.Id,
c1.AsOfDate,
c1.Grp,
c1.Rn,
0 AS DateDiff
FROM CTE c1
WHERE c1.Rn = 1
UNION ALL
SELECT c1.TabName,
c1.Id,
c1.AsOfDate,
c1.Grp,
c1.Rn,
DATEDIFF(DAY, c2.AsOfDate, c1.AsOfDate) AS DateDiff
FROM CTE c1
INNER JOIN CTE2 c2 ON c2.Rn = c1.Rn - 1 AND c2.Grp = c1.Grp
WHERE c1.Rn > 1
)

SELECT
TabName,
Id,
AsOfDate
FROM CTE2
WHERE DateDiff > 1
TabName Id AsOfDate
TAB1 C103 09/01/2019 00:00:00
TAB1 C104 08/01/2019 00:00:00
SELECT
TabName,
Id,
AsOfDate
FROM
(
SELECT
TabName,
Id,
AsOfDate,
ISNULL(DATEDIFF(DAY, LAG(AsOfDate) OVER (PARTITION BY TabName, Id ORDER BY AsOfDate), AsOfDate), 0) AS PrevDateDiff
FROM Temp
) t
WHERE t.PrevDateDiff > 1
ORDER BY tabname, id, asofdate
TabName Id AsOfDate
TAB1 C103 09/01/2019 00:00:00
TAB1 C104 08/01/2019 00:00:00