Code: Select all
WITH rank1 AS
(SELECT Category,
Date,
LEAD(Date, 1)
OVER (
PARTITION BY Category
ORDER BY Date) AS NextDate
FROM public.test),
rank2 AS
(SELECT *,
CASE WHEN DATEDIFF(day, Date, NextDate) > 2 THEN 1 ELSE 0 END AS Diff
FROM rank1)
SELECT *,
RANK()
OVER (
PARTITION BY Category, Diff
ORDER BY Date) AS Rank
FROM rank2
ORDER BY Category,
Date;
Code: Select all
Category | Date | NextDate | Diff | Rank
----------+------------+------------+------+------
1211 | 2014-07-17 | 2014-08-06 | 1 | 1
1211 | 2014-08-06 | 2014-08-08 | 0 | 1
1211 | 2014-08-08 | | 0 | 2
1234 | 2014-07-15 | 2014-07-17 | 0 | 1
1234 | 2014-07-17 | 2014-07-29 | 1 | 1
1234 | 2014-07-29 | 2014-07-31 | 0 | 2
1234 | 2014-07-31 | 2014-08-02 | 0 | 3
1234 | 2014-08-02 | 2014-08-04 | 0 | 4
1234 | 2014-08-04 | 2014-08-06 | 0 | 5
1234 | 2014-08-06 | | 0 | 6