使用窗口函数根据时间搜索行
Posted
技术标签:
【中文标题】使用窗口函数根据时间搜索行【英文标题】:Using Window Functions to search back through rows based on time 【发布时间】:2019-02-04 20:14:39 【问题描述】:我是 SQL 新手,并且一直在努力了解如何根据时间向后搜索前几行。
我发现 Windows Lag Function 在这里可能对我有帮助,但我还没有找到一种方法来定义它的搜索时间段。
如果我输入:-
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】:此答案适用于 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';
【讨论】:
非常感谢 Gordon 的评论和想法,但我没有添加(抱歉)我正在使用 POSTGRES,在尝试了这个并搜索了一个等价物之后,我无法让它工作。我不确定我是否使用“滞后”功能朝着正确的方向前进,但我会继续试验,非常感谢任何进一步的指针。以上是关于使用窗口函数根据时间搜索行的主要内容,如果未能解决你的问题,请参考以下文章