我已成功根据可用的原始数据创建了如下数据集,并且希望每天生成 TP90 值。我的样本数据如下
PURCHASE_DATE QTY
2019-01-01 10
2019-01-02 30
2019-01-03 50
....
2019-01-31 20
例如,我想使用 QTY 列中截至该日期的值生成 TP90 可能
PURCHASE_DATE QTY TP90
2019-01-01 10 TP90 of QTY till 2019-01-01
2019-01-02 30 TP90 of QTY till 2019-01-02
2019-01-03 50 TP90 of QTY till 2019-01-03
....
2019-01-31 20
我可以使用 APPROX_PERCENTILE(QTY, 0.9) 生成 TP90,但每天都很难生成它。
谢谢
最佳答案
唉,虽然很擅长窗口函数,但显然没有提供窗口approx_percentile()
。
一种选择是自连接表并聚合:
select
t.purchase_date,
t.qty,
approx_percentile(t1.qty, 0.9) tp90
from mytable t
inner join mytable t1
on t1.purchase_date <= t.purchase_date
group by
t.purchase_date,
t.qty
编辑
收到Piotr Findeisen的反馈后:所有聚合函数都可以用作窗口函数,如explained in the documentation 。所以这应该有效:
select
t.purchase_date,
t.qty,
approx_percentile(t1.qty, 0.9) over(order by purchase_date) tp90
from mytable t
我(和 Piotr)有兴趣知道这在您的用例中是否正常工作。
关于sql - Presto - 每天计算 TP90,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58809207/