postgreSQL,累计总和达到标记的第一个日期
我有以下样品 输出应该是每个id的第一个日期,当cum_rev达到100标记时 我尝试了以下方法,因为我使用组bz技巧和where条件教授,我只会得到第一次出现的大于100的值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
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