gpt4 book ai didi

sql - PostgreSQL array_agg 但有停止条件

转载 作者:行者123 更新时间:2023-11-29 12:02:01 24 4
gpt4 key购买 nike

我有一个包含 child 记录的表格,我想按月降序获得逗号分隔的结果,但每个月 child 的状态都有一个中断条件。如果状态为 0 将其推送到数组,但如果状态为 1 则不要将其推送并在那里中断并且不检查前几个月的记录。

表格

Children Table

期望的输出:

Desired Output

我已经尝试过这种方式,这给了我所有的时间。但我不知道如何在每个 child 的status = 1条件下打破它

SELECT name, ARRAY_AGG(month ORDER BY month DESC)
FROM children
GROUP BY name

最佳答案

我认为这是:

SELECT name, ARRAY_AGG(month ORDER BY month DESC)
FROM (SELECT c.*,
MAX(c.month) FILTER (c.status = 1) OVER (PARTITION BY c.name) as last_1_month
FROM children c
) c
WHERE month > last_1_month
GROUP BY name;

此逻辑仅获取 status = 1 的最后一个月,然后选择所有后续月份。

如果月份实际上是连续的且没有间隙,那么您可以:

SELECT name,
ARRAY_AGG(month ORDER BY month DESC)[1:MAX(month) - MAX(month) FILTER (c.status = 1)]
FROM children c
GROUP BY name;

关于sql - PostgreSQL array_agg 但有停止条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53184996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com