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

时间:2019-02-04 20:14:40

标签: sql postgresql window-functions

我是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 :(得分:0)

此答案适用于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';