2013-10-07 3 views
0

У меня есть таблица, которая содержит повторяющиеся значения в столбцах c1, c2, c3, c4, c5.
Я хочу перечислить все даты в строке, содержащие значения, сгенерированные группой по функции.Значения даты конкатенации в Postgres

datum   c1 c2 c3 c4 c5 number 
2001-04-22  1  2  3  4  5  2 
1999-08-24  2  3  4  5  6  2 
2005-11-08  2  4  5  6  7  2 
1998-03-20  1  2  3  4  5  2 
2009-07-02  2  3  4  5  6  2 
1996-05-21  2  4  5  6  7  2 

Результат должен выглядеть следующим образом:

datum      c1 c2 c3 c4 c5 number 
1998-03-20 , 2001-04-22 1  2  3  4  5  2 
1999-08-24 , 2009-07-02 2  3  4  5  6  2 
1996-05-21 , 2005-11 08 2  4  5  6  7  2 

в исходной таблице могут быть повторяющиеся значения во всех столбцах, каким будет решение?

ответ

1
select string_agg(to_char(datum, 'yyyy-mm-dd'), ','), 
     c1, 
     c2, 
     c3, 
     c4, 
     c5, 
     number 
from some_table 
group by c1, c2,c3, c4, c5, number 
0

Если вы удовлетворены с array of date в результате вы можете использовать простой и быстрый array_agg().

Если вы хотите, чтобы массив (или список) в определенном порядке добавили ORDER BY в функцию агрегата. Цитирую the manual at the same page:

Этот порядок не определен по умолчанию, но можно управлять записью ORDER BY оговорку в агрегированном вызова [...]

SELECT array_agg(datum ORDER BY datum) AS datum_arr 
     ,c1, c2, c3, c4, c5 
     ,min(number) AS number -- you did not specify how to aggregate number 
FROM tbl 
GROUP BY c1, c2,c3, c4, c5; 
Смежные вопросы