Можно ли сохранить последний результат итерационной строки и использовать ее для следующей итерации строки?
Например, у меня есть таблица say (Time_Table
).
__ Key type timeStamp
1 ) 1 B 2015-06-28 09:00:00
2 ) 1 B 2015-06-28 10:00:00
3 ) 1 C 2015-06-28 11:00:00
4 ) 1 A 2015-06-28 12:00:00
5 ) 1 B 2015-06-28 13:00:00
Теперь предположим, что у меня есть exceptionTime
90 минут, который является постоянным.
Если я начну проверять свой Time_Table
, то:
-
для первой строки, так как нет строки до
09:00:00,
, она будет напрямую помещать эту запись в мою целевую таблицу. Теперь моя точка отсчета находится в 9:00:00. -
Для второй строки в
10:00:00,
последняя опорная точка была09:00:00
иTIMESTAMPDIFF(s,09:00:00,10:00:00)
равна 60, что меньше требуемого 90. Я не добавляю эту строку в свою целевую таблицу. -
Для третьей строки последнее записанное исключение было в
09:00:00
, аTIMESTAMPDIFF(s,09:00:00,11:00:00)
равно 120, что больше требуемых 90, поэтому я выбираю эту запись и устанавливаю опорную точку на11:00:00
. -
Для четвертой строки
TIMESTAMPDIFF(s,11:00:00,12:00:00)
. Точно так же он не будет сохранен. -
Это снова сохраняется.
Таблица целей
__ Key type timeStamp
1 ) 1 B 2015-06-28 09:00:00
2 ) 1 C 2015-06-28 11:00:00
3 ) 1 B 2015-06-28 13:00:00
Есть ли способ решить эту проблему purely in SQL
?
Мой подход:
SELECT * FROM Time_Table A WHERE NOT EXISTS(
SELECT 1 FROM Time_Table B
WHERE A.timeStamp > B.timeStamp
AND abs(TIMESTAMPDIFF(s,B.timeStamp,A.timeStamp)) > 90
)
Но это не будет работать.