gpt4 book ai didi

sql - 检测 postgres 表中的一系列下降值

转载 作者:行者123 更新时间:2023-11-29 11:35:10 25 4
gpt4 key购买 nike

我有一个包含一系列日期、客户 ID 和整数的表格,该表格每周更新所有 ID 的新日期和整数值。

我希望能够编写一个查询来检测最近的三个值是否按降序排列,并为每个 ID 返回 TRUE 或 FALSE。

所以,对于表格:

ID | Weekending | Value
1 | 2015-07-15 | 5
2 | 2015-07-15 | 23
1 | 2015-07-08 | 7
2 | 2015-07-08 | 21
1 | 2015-07-01 | 9
2 | 2015-07-01 | 24

我想要一个针对 ID:1 返回 TRUE 的查询,因为三个连续的值下降了,但对 ID:2 返回 FALSE,因为值增加了。

最佳答案

不确定性能,但像这样使用 lag 窗口函数应该可行:

select *, 
case when
value < lag(value, 1) over (partition by id order by weekending)
and value < lag(value, 2) over (partition by id order by weekending)
then 'True' else 'False' end
from t
order by id, weekending desc;

这将标记行 1 | 2015-07-15 | 5 为真,所有其他行为假。

Sample SQL Fiddle

要仅获取每个 id 的最后一行,您可以这样做:

select ID, Weekending, Value, decrease 
from (
select *,
case when
value < lag(value, 1) over (partition by id order by weekending)
and value < lag(value, 2) over (partition by id order by weekending)
then 'True' else 'False' end as decrease,
row_number() over (partition by id order by weekending desc) as r
from t
) src
where r = 1;

这会给你这样的结果:

ID  Weekending  Value   decrease
1 2015-07-15 5 True
2 2015-07-15 23 False

关于sql - 检测 postgres 表中的一系列下降值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31924213/

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