sql - Presto - 每天计算 TP90

标签 sql presto

我已成功根据可用的原始数据创建了如下数据集,并且希望每天生成 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/

相关文章:

sql - 当标签是字符串数组时,如何计算 SQL 中每个标签的项目数?

sql - 更新 SQL Server XML 列中的 XML 属性

PHP MYSQL 返回结果两次(Double)

amazon-web-services - Amazon S3 上的 Presto

hive - 使用 Amazon Athena 和 Open JSONx Serde 处理重复 key

cassandra - 有没有办法将 Facebook Presto 0.131 与 Cassandra 3.0.0 一起使用?

sql - 比较 HIVE 中的两个表

SQL 先按 0 排序,然后按数字/值降序

sql - 我如何创建 "recursive sql"

sql - 带有时间戳的 AWS Athena SQL 查询错误