使用窗口函数根据时间搜索行



我是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 小时前的行(滞后(,而不是我必须定义没有时间与之关联的行数。

请问有谁知道最好的方法吗?

谢谢

这个答案是针对甲骨文的,因为这个问题最初被标记为甲骨文。

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';

最新更新