Обработка строки за строкой в SQL

#sql #hive #recursive-query

#sql #улей #рекурсивный запрос

Вопрос:

Я использую Hive SQL server. В моей базе данных я пытаюсь удалить записи, у которых разрыв с предыдущей записью составляет менее 7 дней, но при удалении записи я хочу проверить разрыв с «предыдущей сохраненной записью», а не с какой-либо предыдущей записью.

Снимок базы данных:

Я хочу сохранить всю запись, помеченную как 1, в частности, Rec # 7, Хотя пробел в 7-й записи равен <7, поскольку предыдущая запись удаляется, разрыв между 7-й и 5-й становится 8.

Ответ №1:

Вы можете использовать накопительный максимальный:

 select t.*
from (select t.*,
             max(case when retained = 1 then intdate end) over (order by intdate rows between unbounded preceding and 1 preceding) as prev_intdate
      from t
     ) t
where prev_intdate is null or
      prev_intdate > dateadd(intdate, 7);