ОК, поэтому у меня было некоторое время, чтобы преобразовать свое решение MatLab в SQL. Не слишком уверен, действительно ли это так здорово, но работает довольно хорошо. Мое решение MatLab заняло более 30 минут, чтобы вычислить результат для 2,2 миллиона строк, которые у меня были, а версия SQL заняла 4 минуты!
Вот код для справки, если у кого-то возникнет подобная проблема в будущем:
DECLARE @i INT
DECLARE @Count INT
DECLARE @Selection INT
DECLARE @Result TABLE (ID INT)
SET @i = 1
SET @Count = (SELECT count(*) FROM CFLAPS_AllStations)
WHILE (@i <= @Count)
BEGIN
IF @i < @Count - 4
BEGIN
SET @Selection = (SELECT TotalParticlesCount FROM CFLAPS_AllStations WHERE ID = @i)
IF @Selection = (SELECT TotalParticlesCount FROM CFLAPS_AllStations WHERE ID = @i+4)
BEGIN
INSERT INTO @Result SELECT ID FROM CFLAPS_AllStations WHERE ID = @i
END
ELSE
BEGIN
INSERT INTO @Result SELECT ID FROM CFLAPS_AllStations WHERE ID = @i
SET @i =
CASE
WHEN @Selection = (SELECT TotalParticlesCount FROM CFLAPS_AllStations WHERE ID = @i+3) THEN @i-1
WHEN @Selection = (SELECT TotalParticlesCount FROM CFLAPS_AllStations WHERE ID = @i+2) THEN @i-2
WHEN @Selection = (SELECT TotalParticlesCount FROM CFLAPS_AllStations WHERE ID = @i+1) THEN @i-3
WHEN @Selection = (SELECT TotalParticlesCount FROM CFLAPS_AllStations WHERE ID = @i) THEN @i-4
END
END
END
ELSE
BEGIN
INSERT INTO @Result SELECT ID FROM CFLAPS_AllStations WHERE ID = @i
END
SET @i = @i+5
END
SELECT p.ID, p.TotalParticlesCount, p.FullDateTime FROM CFLAPS_AllStations as p, @Result as q WHERE p.ID = q.ID
Точно так же вы все знаете, почему это было важно: прибор всегда регистрирует 5 секунд идентичных данных, но если он останавливает запись, скажем, во второй 3 цикла; он не будет записывать 4-ю и 5-ю секунды, и поэтому в данных появляются пробелы. Мне удалось проверить это с помощью цикла while, и мне удалось зафиксировать все эти несоответствия.
Окончательный вывод:
ID TotalParticles DateTime
1 745 2009-06-23 00:00:00.000
6 727 2009-06-23 00:00:05.000
11 771 2009-06-23 00:00:10.000
16 837 2009-06-23 00:00:15.000
21 768 2009-06-23 00:00:20.000
26 703 2009-06-23 00:00:25.000
31 822 2009-06-23 00:00:30.000
36 730 2009-06-23 00:00:35.000
41 731 2009-06-23 00:00:40.000
46 706 2009-06-23 00:00:45.000
51 733 2009-06-23 00:00:50.000
...
2290089 677 2009-06-22 23:59:15.000
2290094 720 2009-06-22 23:59:20.000
2290099 771 2009-06-22 23:59:25.000
2290104 770 2009-06-22 23:59:30.000
2290109 761 2009-06-22 23:59:35.000
2290114 851 2009-06-22 23:59:40.000
2290119 801 2009-06-22 23:59:45.000
2290124 754 2009-06-22 23:59:50.000
2290129 702 2009-06-22 23:59:55.000
Спасибо всем, кто выручил.