postgreSQL,累计总和达到标记的第一个日期

postgreSQL,累计总和达到标记的第一个日期,postgresql,group-by,sum,subquery,partition-by,Postgresql,Group By,Sum,Subquery,Partition By,我有以下样品 输出应该是每个id的第一个日期,当cum_rev达到100标记时 我尝试了以下方法,因为我使用组bz技巧和where条件教授,我只会得到第一次出现的大于100的值 SELECT id ,pd ,cum_rev FROM ( SELECT id ,pd ,rev ,SUM(rev) OVER ( PARTITION BY id ORDER BY pd

我有以下样品 输出应该是每个id的第一个日期,当cum_rev达到100标记时

我尝试了以下方法,因为我使用组bz技巧和where条件教授,我只会得到第一次出现的大于100的值

SELECT id
    ,pd
    ,cum_rev
FROM (
    SELECT id
        ,pd
        ,rev
        ,SUM(rev) OVER (
            PARTITION BY id 
            ORDER BY pd
            ) AS cum_rev
    FROM tab1
    )
WHERE cum_rev >= 100
GROUP BY id
但它不工作,我得到以下错误。而且,当我添加别名时也没有帮助

错误:发件人中的子查询必须具有别名行4:FROM ^提示:例如,从选择。。。[作为]福

因此,期望的输出是:

2   2015-04-02  135.70
3   2015-07-03  102.36
我需要另一种方法吗?有人能帮忙吗? 谢谢

您可以为每个id组分区使用累积id。要找到第一个超过阈值的值,需要检查前一个值是否低于阈值,而当前值满足阈值

PS:出现错误是因为子查询缺少别名。在我的例子中,它只是

SELECT
    id, total
FROM (
    SELECT
        *,
        SUM(rev) OVER (PARTITION BY id ORDER BY pd) - rev as prev_total,
        SUM(rev) OVER (PARTITION BY id ORDER BY pd) as total
    FROM tab1
) s
WHERE total >= 100 AND prev_total < 100