Это один из возможных вариантов.
CREATE TABLE SampleData(
ID int,
Type int);
INSERT INTO SampleData
VALUES
(1, 1),
(2, 2),
(3, 2),
(4, 2),
(5, 1),
(6, 2),
(7, 2);
DECLARE @ID int =1;--Parameter
DECLARE @NextID int = (SELECT TOP 1 ID
FROM SampleData
WHERE ID > @ID
AND Type = 1
ORDER BY ID);
SELECT *
FROM SampleData
WHERE Type = 2
AND ID > @ID
AND (ID < @NextID OR @NextID IS NULL);
Это пример того, как создать встроенную табличную функцию.
CREATE FUNCTION GetSubset(
@ID int
)
RETURNS TABLE
AS
RETURN
SELECT *
FROM SampleData sd
WHERE sd.Type = 2
AND sd.ID > @ID
AND sd.ID <= ISNULL((SELECT TOP 1 i.ID
FROM SampleData i
WHERE i.ID > @ID
AND i.Type = 1
ORDER BY i.ID), sd.ID);