Postgresql:STRING_AGG()按未显示值排序的最佳方式
我正在尝试按照他们登录的顺序生成一个名称字符串。我有工作代码,但它足够丑陋,我相信我错过了一个更直接的方法 目标,按上次登录的顺序返回一个不同用户名的字符串Postgresql:STRING_AGG()按未显示值排序的最佳方式,sql,postgresql,sql-order-by,aggregate-functions,Sql,Postgresql,Sql Order By,Aggregate Functions,我正在尝试按照他们登录的顺序生成一个名称字符串。我有工作代码,但它足够丑陋,我相信我错过了一个更直接的方法 目标,按上次登录的顺序返回一个不同用户名的字符串 我从一个名字和日期的列表开始 我为每个名称选择最近的行。()t 我按日期订购。()s 我把它串起来,给我想要的串 PgSql 9.6 我可以消除这些嵌套查询中的任何一个吗 SELECT STRING_AGG(s.name, ', ') AS names FROM (SELECT t.name F
SELECT
STRING_AGG(s.name, ', ') AS names
FROM
(SELECT
t.name
FROM
(SELECT DISTINCT ON (t2.name)
t2.name
,t1.created
FROM
logins t1
LEFT JOIN
users t2 ON t2.id = t1.user_id
ORDER BY t2.name, t1.created DESC
) t
ORDER BY t.created DESC
) s
你试过这个吗
SELECT STRING_AGG(s.name, ', ' ORDER BY created DESC) AS names
FROM (SELECT u.name, MAX(l.created) as created
FROM logins l JOIN
users u
ON u.id = l.user_id
GROUP BY u.name
) ul;
左连接似乎没有必要。登录中的用户ID应有效。如果没有,请使用左连接
谢谢,这很有效。我也尝试过类似的顺序,但总是遇到一些累积错误。