我需要创建一个查询来求和值,直到我达到某个数量.

select client_id, dt, SUM(value)
from my_table
group by 1, 2;

我的桌子是这样的:

client_id |    dt      |  value
----------+------------+-------
    23    | 2023-01-01 |   200
    23    | 2023-01-02 |   800
    23    | 2023-01-03 |   500

我的预期结果是client_id: 23|sum: 2023-01-02,也就是总数达到client_id: 230(200+800)的那一天.

推荐答案

按如下方式组合开窗的sum()distinct on:

with running as (
  select client_id, dt, 
         sum(value) over (partition by client_id 
                              order by dt) as run_total
    from my_table
)
select distinct on (client_id) client_id, dt, run_total
  from running
 where run_total >= 1000
 order by client_id, dt;

Working example.

Postgresql相关问答推荐

将几个左连接合并为一个

计算两个子查询之间的差异

如何确定要与给定转储文件一起使用的pg_Restore版本?

GORM Golang SQL查询执行不区分大小写的搜索不起作用

如何返回old_ids和重复行的映射';来自PostgreSQL函数的s new_id

Postgres 对 WHERE 子句并行使用两个索引

在Go中从Kafka读取并写入PostgreSQL时如何处理错误?

使用FastAPI和PostgreSQL进行测试

Supabase 数据库大小问题

从 PostgreSQL 中的每个组中抽取 N 个样本

查找列中的数据是否满足sql中的数据类型条件

heroku、postgreSQL、django、comments、tastepie:没有运算符匹配给定的名称和参数类型

postgres 和 python

避免 created_at 和 updated_at 由 sequelize 自动生成

如何在psql中退出查询结果查看器?

丢弃顺序和级联

Postgresql:在插入列时(或之前)自动小写文本

Postgresql varchar 是否使用 unicode 字符长度或 ASCII 字符长度计算?

PostgreSQL 中跨多个表的索引

在 PostgreSQL 中使用 CASE 一次影响多个列