【发布时间】:2020-11-30 16:27:49
【问题描述】:
我正在尝试创建一个指标,用于在组内随时间增加价值。特别是,如果价值随着时间的推移增加了 50%,我会尝试标记某些 grp。
我有一个看起来像这样的原始数据:
id grp value_dt value
--------------------------------
1 1 11/20/20 1.4
1 1 11/21/20 0.8
1 1 11/24/20 2.8
1 1 11/25/20 2.5
1 2 11/29/20 1.5
1 2 12/1/20 1.6
2 1 11/21/20 0.8
2 2 11/26/20 0.9
2 3 12/1/20 0.9
2 3 12/3/20 2.8
您可以看到,对于 id = 1 and grp = 1,该值会随着时间的推移而增加和减少,但因为它在 2020 年 11 月 21 日和 20 年 11 月 24 日之间随时间从 0.8 增加到 2.8(大于 50 % 增加),我想标记整个grp 1。我希望我的输出看起来像:
id grp val_ind
-----------------------
1 1 1
1 2 0
2 1 0
2 2 0
2 3 1
我只能考虑使用 min 和 max(如下所示),其中不包括“随时间”因素...
select id,
grp,
min(value) as min_grp,
max(value) as max_grp,
(max_grp - min_grp) as val_diff,
case when val_diff >= min_grp * 1.5 then 1 else 0 end as val_ind
如果有人可以提供他们的建议,我将不胜感激!
【问题讨论】:
-
您所说的“时间因素”是什么意思?当然,同一组中的两行(具有不同的
values)总是来自不同的日期。 -
@Bergi 嗨,我的意思是在较小的价值之后必须发生较大的价值。
标签: postgresql conditional-statements case-when