Sql Postgres,在json_agg中使用json_build_对象字段的distinct

Sql Postgres,在json_agg中使用json_build_对象字段的distinct,sql,postgresql,jsonb,Sql,Postgresql,Jsonb,我正在进行一个查询,从一个名为branchkpis的表中检索一些数据。 branchkpis与名为branch的表有关系,而branch与组有关系,而组又与GroupKPI有关系 我正在尝试从每个分支机构的最新日期聚合这两个kpi,并且还希望插入每个分支机构的组最新kpi SELECT * FROM (SELECT "api_branch"."id", "api_branch"."name"

我正在进行一个查询,从一个名为branchkpis的表中检索一些数据。 branchkpis与名为branch的表有关系,而branch与组有关系,而组又与GroupKPI有关系

我正在尝试从每个分支机构的最新日期聚合这两个kpi,并且还希望插入每个分支机构的组最新kpi

SELECT *
FROM (SELECT "api_branch"."id",
             "api_branch"."name",
             CASE
                 WHEN "api_branchkpis"."kpi" <= "api_branchkpis"."kpi_avg"
                     THEN 3
                 WHEN "api_branchkpis"."kpi"
                     BETWEEN ("api_branchkpis"."kpi_avg" + 0.001)
                     AND
                     ("api_branchkpis"."kpi_avg" + ("api_branchkpis"."kpi_avg" * 0.1))
                     THEN 2
                 WHEN "api_branchkpis"."kpi" >
                      ("api_branchkpis"."kpi_avg" + ("api_branchkpis"."kpi_avg" * 0.1))
                     THEN 1
                 ELSE 1 END AS "color",
             "api_branchkpis"."kpi",

             json_agg(json_build_object('id', "api_group"."id",
                                        'name', "api_group"."name",
                                        'color', CASE
                                                     WHEN "api_groupkpis"."kpi" <=
                                                          "api_groupkpis"."kpi_avg"
                                                         THEN 3
                                                     WHEN "api_groupkpis"."kpi"
                                                         BETWEEN ("api_groupkpis"."kpi_avg" + 0.001)
                                                         AND
                                                         ("api_groupkpis"."kpi_avg" +
                                                          ("api_groupkpis"."kpi_avg" * 0.1))
                                                         THEN 2
                                                     WHEN "api_groupkpis"."kpi" >
                                                          ("api_groupkpis"."kpi_avg" +
                                                           ("api_groupkpis"."kpi_avg" * 0.1))
                                                         THEN 1
                                                     ELSE 1 END,
                                        'cow_count', "api_groupkpis"."cow_count",
                                        'kpi_field', "api_groupkpis"."kpi",
                                        'kpi_avg_field', "api_groupkpis"."kpi_avg",
                                        'kpi_field_in_pct',
                                        round(("api_groupkpis"."kpi" * 100.0) /
                                              "api_groupkpis"."cow_count",
                                              2),
                                        'kpi_avg_field_in_pct',
                                        round(cast(("api_groupkpis"."kpi_avg" * 100.0) as numeric) /
                                              "api_groupkpis"."cow_count",
                                              2),
                                        'score_deviation_from_avg', ("api_groupkpis"."kpi" -
                                                                     "api_groupkpis"."kpi_avg")
                 ))            "groups_data"
      FROM "api_branch"
               INNER JOIN api_group
                          on api_branch.id = api_group.branch_id
               INNER JOIN api_groupkpis on api_group.id = api_groupkpis.group_id
               LEFT OUTER JOIN api_branchkpis
                               ON api_branchkpis."branch_id" = api_branch.id
                                   AND api_branchkpis."date" =
                                       (SELECT MAX("date")
                                        from api_branchkpis
                                        where (branch_id = api_branch.id
                                            AND "api_branchkpis"."cow_count" != 0
                                                  )
                                       )
               INNER JOIN api_site on api_site.id = api_branch.site_id
      WHERE "api_site"."id" = '73888'
      group by "api_branch"."id",
               "api_branch"."name",
               "api_branchkpis"."date",
               "api_branchkpis"."kpi",
               "api_branchkpis"."kpi_avg",
      ORDER BY "api_branch"."id", "api_branchkpis"."date" DESC) AS "Q"
ORDER BY "Q"."kpi_field" ASC NULLS LAST
LIMIT 50
这个查询有效,除了在组的JSON对象中,它为每一行groupkpi创建一个条目,因为我只想获取最新的groupkpi。 我如何进行不同的调用,使每个组id仅获取一行,并按日期将其设置为最新的行