Я работаю с данными ЭКГ, которые в основном имеют следующую схему
Col 1 = TIMESTAMP
Col 2 = PATIENTID
Col 3 = ECGVALUE
Теперь я пытаюсь написать оператор SQL, который должен иметь возможность выбрать все строки, которые удовлетворяют следующемуусловие
Row index >= n and TIMESTAMP of xth row <= TIMESTAMP of nth row + offset
Для более подробного объяснения, скажем, у меня есть следующие данные в моей базе данных
1.1 ANON 1.1
1.3 ANON 2.3
3.5 ANON 4.3
5.0 ANON 6.5
6.3 ANON 7.5
7.9 ANON 8
8.6 ANON 9.4
Теперь я хочу выбрать данные от 3-й строки до 3 секунд данныхбыл собран, что означает, что мой набор результатов должен иметь
3.5 ANON 2.3 *//3rd row till TIMESTAMP <= 3.5 + 3 <= 6.5*
1.3 ANON 2.3
3.5 ANON 4.3
5.0 ANON 6.5
6.3 ANON 7.5
Последние две строки игнорируются, так как разница между TIMESTAMP первой и последней не может превышать 3. Так что если я вернусь к своему состоянию, то есть
Row index >= n and TIMESTAMP of xth row <= TIMESTAMP of nth row + offset
Здесь,
n: nth row from where data must be selected
x: Any arbitary row in result set
offset: Maximum difference between first and last TIMESTAMP of result set.
Я написал рабочий оператор SQL для вышеуказанного условия, но я думаю, что он не настолько оптимизирован, как я новичок в SQL.
SELECT TIMESTAMP, ECGVALUE
FROM
(
SELECT TIMESTAMP, ECGVALUE, ROW_NUMBER() OVER() AS RN
FROM EKLUND.DEV_RAWECG
)
WHERE RN >= n AND TIMESTAMP <=
(
SELECT TIMESTAMP FROM
(
SELECT TIMESTAMP, ROW_NUMBER() OVER() AS TM
)
WHERE TM = n
) + offset;