Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql:STRING_AGG()按未显示值排序的最佳方式_Sql_Postgresql_Sql Order By_Aggregate Functions - Fatal编程技术网

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

我正在尝试按照他们登录的顺序生成一个名称字符串。我有工作代码,但它足够丑陋,我相信我错过了一个更直接的方法

目标,按上次登录的顺序返回一个不同用户名的字符串

  • 我从一个名字和日期的列表开始
  • 我为每个名称选择最近的行。()t
  • 我按日期订购。()s
  • 我把它串起来,给我想要的串
  • PgSql 9.6

    我可以消除这些嵌套查询中的任何一个吗

    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应有效。如果没有,请使用
    左连接

    谢谢,这很有效。我也尝试过类似的顺序,但总是遇到一些累积错误。