2016-06-30 8 views
1

Ich versuche, eine Spalte auszuwählen, die eine Aggregation aller Titel der verknüpften Zeilen ist, geordnet nach den Erstellungsdatum der verknüpften Zeilen. Wie auch immer die ORDER BY in der INNER JOIN, bleibt die Zeichenfolge der Titel immer gleich.Aggregierte Tabellentitel in kommagetrennte Zeichenfolge, nach Zeit sortiert

Hier ist meine Frage:

   SELECT 
        id AS assignment_id, 
        ARRAY_TO_STRING(ARRAY(SELECT DISTINCT UNNEST(ARRAY_AGG(_outlets.title))), ',', '') AS outlets, 
       FROM 
        assignments 
       LEFT JOIN (
         SELECT 
          assignment_outlets.created_at AS created_at, 
          outlet_id, 
          assignment_id, 
          title 
         FROM assignment_outlets 
         INNER JOIN outlets ON outlets.id = assignment_outlets.outlet_id 
         ORDER BY assignment_outlets.created_at DESC 
        ) 
        AS _outlets 
        ON _outlets.assignment_id = assignments.id 
       GROUP BY assignments.id; 

Ich versuche, das Ergebnis 'title1,title2,title3,title4,...' zu bekommen, wo sie bestellt werden von als ältestem neuesten links nach rechts.

+0

Sie Probe veröffentlichen können Ausgänge von dem, was Sie zurückkommen und was würden Sie zurückkommen? – Nicarus

+0

"Comma separated array" - ich muss es notieren! ;) – Adam

+0

Etwas wie '..., array_to_string (array_agg (distinct _outlets.title order von _outlets.created_at desc), ',') ...' – Abelisto

Antwort

0

Sie können einfach string_agg verwenden, und es gibt keine Notwendigkeit für eine Unterabfrage:

SELECT a.id AS assignment_id, string_agg(o.title, ',' ORDER BY ao.created_at DESC) AS outlets 
FROM assignments a 
LEFT JOIN assignment_outlets ao ON (ao.assignment_id = i.id) 
LEFT JOIN outlets o ON (o.id = ao.outlet_id) 
GROUP BY a.id; 
Verwandte Themen