【发布时间】:2021-06-07 15:30:22
【问题描述】:
我正在创建一份报告,显示员工的前团队以及他们离开的日期,并汇总到报告中的单个字段中。这在一定程度上有效:
WITH "most_recent_leave_dates" AS (
SELECT
staff_id, -- alphanumeric string
team,
MAX(date_left) AS "most_recent_date_left"
FROM team_membership
WHERE date_left IS NOT NULL
GROUP BY staff_id, team
-- I thought ordering this CTE would do it, but no
ORDER BY staff_id, most_recent_date_left DESC
)
SELECT
staff_id,
STRING_AGG(
DISTINCT CONCAT(team, ' until ' || most_recent_date_left),
CHR(10) -- separate by newline
) AS "teams"
FROM most_recent_leave_dates
GROUP BY staff_id
https://www.db-fiddle.com/f/jZCcKRWNV8vLJUFsa6kq7/2
但STRING_AGG 是按字母顺序对术语进行排序。我希望它们按most_recent_date_left 排序。我该怎么做?
documentation 声明:
或者,提供来自排序子查询的输入值将 通常工作。
我是否必须将 CTE 重写为子查询...?
【问题讨论】:
标签: sql postgresql string-agg