Использование оконных функций для поиска в строках по времени - PullRequest
0 голосов
/ 04 февраля 2019

Я новичок в SQL и несколько дней боролся за то, чтобы понять, как искать в обратном порядке по предыдущим строкам по времени.

Я обнаружил, что функция отставания Windows может помочь мне в этом, но я не нашелспособ определить период времени для поиска обратно.

Если я введу: -

SELECT food_word_1, 
       date, 
       lead(food_word_1,2) OVER (ORDER BY date DESC) as prev_food_word_1 
FROM bookmark 
WHERE mood = 'allergies'"

Результат будет выглядеть следующим образом: -

food_word_1 |            date            | prev_food_word_1 
-------------+----------------------------+------------------
 burritos    | 2019-02-01 09:56:40.943341 | 
 burritos    | 2019-02-01 09:56:31.56869  | 
 burritos    | 2019-02-01 09:56:31.34883  | burritos
 cereal bar  | 2019-01-10 07:24:29.602226 | burritos
 almonds     | 2019-01-09 08:37:34.223448 | burritos
 fennel      | 2019-01-09 08:35:44.186134 | cereal bar

Я получаю результат при поиске по 2 строкам, но мне хотелось бы, чтобы этот поиск выполнялся назад (с отставанием) для строк, которые были на 36 часов раньше, вместо того, чтобы мне приходилось определять количество строк без ассоциированного с ними времени.

Кто-нибудь знает лучший подход для этого, пожалуйста?

Спасибо

1 Ответ

0 голосов
/ 05 февраля 2019

Этот ответ для Oracle, поскольку вопрос был изначально помечен как Oracle.

Oracle поддерживает range between с диапазонами чисел, но их также можно использовать для дат.Попробуйте это:

SELECT food_word_1, 
       date, 
       lead(food_word_1) OVER (ORDER BY date DESC RANGE BETWEEN 1.5 PRECEDING AND CURRENT ROW) as prev_food_word_1 
FROM bookmark 
WHERE mood = 'allergies';
...