By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
DECLARE @t TABLE (id INT, tBegin DATETIME, orderId INT);
INSERT INTO @t VALUES
(1 , '2018-10-20 00:00:05', 1),
(2 , '2018-10-20 00:05:15', 1),
(3 , '2018-10-20 01:00:05', 1),
(10, '2018-10-20 10:03:05', 3),
(12, '2018-10-20 11:04:05', 8),
(20, '2018-10-20 14:15:05', 3),
(37, '2018-10-20 18:12:05', 1);
WITH cte1 AS (
SELECT *, CASE WHEN orderId = LAG(orderId) OVER (ORDER BY tBegin) THEN 0 ELSE 1 END AS chg
FROM @t
), cte2 AS (
SELECT *, SUM(chg) OVER(ORDER BY tBegin) AS grp
FROM cte1
), cte3 AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY grp ORDER BY tBegin) AS rn
FROM cte2
)
SELECT *
FROM cte3
WHERE rn = 1
id | tBegin | orderId | chg | grp | rn |
---|---|---|---|---|---|
1 | 20/10/2018 00:00:05 | 1 | 1 | 1 | 1 |
10 | 20/10/2018 10:03:05 | 3 | 1 | 2 | 1 |
12 | 20/10/2018 11:04:05 | 8 | 1 | 3 | 1 |
20 | 20/10/2018 14:15:05 | 3 | 1 | 4 | 1 |
37 | 20/10/2018 18:12:05 | 1 | 1 | 5 | 1 |