Я использую Oracle PL / SQL.
У меня есть таблица меток времени T, и я хочу установить значение строки для столбца A таким же, как в предыдущей строке, если они отсортированы по столбцам B и Timestamp, при условии, что метки времени не отличаются более чем на 45 секунд.
В псевдокоде это что-то вроде:
UPDATE T t_curr
SET A =
(SELECT A
FROM T t_prev
INNER JOIN t_curr
ON (t_prev is the row right before t_curr, when you sort by B and Timestamp)
AND t_curr.Timestamp - t_prev.Timestamp < 45
)
Я пробовал это:
UPDATE T t_curr
SET A =
(SELECT A
FROM T t_prev
INNER JOIN t_curr
ON RANK (t_curr)
OVER (B, Timestamp)
= 1 + RANK (t_prev)
OVER (B, Timestmap)
AND t_curr.Timestamp - t_prev.Timestamp < 45
)
Но я получил:
Ошибка (38,16): PL / SQL: ORA-00934: групповая функция здесь не разрешена
указывая на первый экземпляр RANK.
Что я сделал не так, и как я понял это правильно?