gpt4 book ai didi

sql - 根据日期获取前一行值

转载 作者:行者123 更新时间:2023-11-29 13:11:06 27 4
gpt4 key购买 nike

我是 SQL 世界的新手,所以这可能是基本的,但我正在尝试根据给定的时间范围获取前几行(多个)值。

我有一个数据库表(书签),它记录了所吃的食物,并想评估给定时间段内所有之前的行,以了解食用的食物是否引起过敏。

例如当我运行以下查询时:-

SELECT food_word_1, date, lag(food_word_1,1) OVER (ORDER BY date) as maybe_this FROM bookmark WHERE mood = 'allergies'

结果如下:-

 food_word_1 |            date            | maybe_this 
-------------+----------------------------+------------
bread | 2018-11-14 09:30:54.272882 |
coffee | 2018-11-15 12:49:46.119737 | bread
beef | 2018-11-15 20:22:51.924697 | coffee
pasta | 2018-11-15 20:23:21.579621 | beef
cereal bar | 2018-11-16 07:53:22.098064 | pasta
red wine | 2018-11-16 09:03:29.589634 | cereal bar
nuts | 2018-11-20 07:43:17.910149 | red wine
duck | 2018-11-21 12:38:31.463169 | nuts
cereal bar | 2018-11-25 09:09:54.187615 | duck
salad | 2018-12-12 21:53:47.258954 | cereal bar

所以“面包”在“咖啡”(Food_word_1) 之前的 1 行被食用/输入 (maybe_this)。

我在这里使用了滞后函数,但我不确定这是正确的方法,但它大致显示了我想要实现的目标,而不是定义要评估的先前行的确切数量(所以 1 在这个在使用滞后函数的情况下),我希望选择 36 小时的时间段。

感谢任何帮助,

医学研究

最佳答案

您可以在自己离开后使用 stringagg 将它们全部列为一个大列表:

select t1.food_word_1 , t1.date, 
string_agg(t2.food_word_1,',') as also_maybe -- make the list
from MyTable t1
left join MyTable t2
on t2.date >= t1.date - (36 * interval '1 hour') -- the previous 36 hours
and t1.food_word_1 <> t2.food_word_1 -- let's ignore the food we've already listed in column 1
and t2.mood = 'allergies' -- limit the results for the list
where t1.mood = 'allergies' -- limit the results for each group
group by t1.food_word_1, t1.date

关于sql - 根据日期获取前一行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54653961/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com