Я использовал следующую часть для получения некоторых данных (я нахожусь в режиме совместимости 80 атм, поэтому у меня нет поля времени и я использую INT для метки времени)
DECLARE @Info TABLE (Location INT IDENTITY, Velocity INT, [Time] INT);
INSERT INTO @Info (Velocity, [Time]) VALUES (40, 80);
INSERT INTO @Info (Velocity, [Time]) VALUES (35, 120);
INSERT INTO @Info (Velocity, [Time]) VALUES (45, 125);
INSERT INTO @Info (Velocity, [Time]) VALUES (50, 150);
INSERT INTO @Info (Velocity, [Time]) VALUES (60, 165);
INSERT INTO @Info (Velocity, [Time]) VALUES (48, 175);
INSERT INTO @Info (Velocity, [Time]) VALUES (40, 180);
INSERT INTO @Info (Velocity, [Time]) VALUES (35, 195);
INSERT INTO @Info (Velocity, [Time]) VALUES (50, 200);
INSERT INTO @Info (Velocity, [Time]) VALUES (70, 210);
INSERT INTO @Info (Velocity, [Time]) VALUES (50, 215);
INSERT INTO @Info (Velocity, [Time]) VALUES (40, 220);
INSERT INTO @Info (Velocity, [Time]) VALUES (45, 225);
INSERT INTO @Info (Velocity, [Time]) VALUES (45, 230);
Предполагая, что ваше местоположение является фиксированными точками, которые необходимо пройти, чтобы выполнить следующие действия, вы получите желаемый результат. Я разбил его на несколько этапов, чтобы было понятно, что делает каждая часть.
DECLARE @Limit INT;
SET @Limit = 40;
WITH Stage1 ([Location], [Velocity], [Time]) AS (
SELECT * FROM @Info WHERE [Velocity] > @Limit
), Stage2 (Start) AS (
SELECT [Time]
FROM [Stage1]
WHERE ([Location] - 1) NOT IN (SELECT [Location] FROM [Stage1])
), Stage3 ([Start], [Stop]) AS (
SELECT [Start]
, (SELECT MIN([Time]) FROM [Stage1] WHERE ([Location] + 1) NOT IN (SELECT [Location] FROM [Stage1]) AND [Time] > [Stage2].[Start])
FROM Stage2
)
SELECT *
FROM Stage3