Sql Postgres,在json_agg中使用json_build_对象字段的distinct
我正在进行一个查询,从一个名为branchkpis的表中检索一些数据。 branchkpis与名为branch的表有关系,而branch与组有关系,而组又与GroupKPI有关系 我正在尝试从每个分支机构的最新日期聚合这两个kpi,并且还希望插入每个分支机构的组最新kpiSql 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"
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仅获取一行,并按日期将其设置为最新的行