我有这张table:
| ID|周期型|期间|委员会|
| --|--|--|--|
| 123456 |每日| 10 | 10 |
| 123456 |每月| 3 | 11 |
| 123456 |每日| 5 | 12 |
| 123456 |每月| 1 | 13 |
| 123457 |每月| 6 | 14 |
| 123457 |每日| 5 | 15 |
| 123457 |每月| 9 | 16 |
(Period类型是int 1&2,但例如我用文本写的)
我需要获取带有id的记录和带有period_type,period和commission列的单个jsonb。此jsonb必须具有max period和max period类型。例如,id - 123456,period_type - 'Monthly',period - 3,commission - 11。
我知道如何得到周期数组(jsonb_build_object
和jsonb_agg
),但不知道如何在这样的条件下得到1个周期。
2条答案
按热度按时间s1ag04yj1#
这是一个标准的Top-1-Per-Group问题。使用
ROW_NUMBER
获取每个组中的top值,然后jsonb_agg
将其聚合到JSON数组中。字符串
db<>fiddle
91zkwejq2#
下一个查询可以写得更容易,但我似乎总是有问题时,多个最大值弹出在1个查询(如获得佣金的最大周期的最大周期类型):
字符串
它将返回:
| ID|期间类型|期间|委员会|
| --|--|--|--|
| 123456 |每月| 3 | 11 |
| 123457 |每月| 9 | 16 |
此查询可用作子查询以获取JSON:
型
产出:
型
请参阅:DBFIDDLE