0

我有一个表,其中包含列中的重复值c1, c2, c3, c4, c5
我想列出包含按函数生成的值的行中的所有日期。

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

在源表中可以是所有列中的重复值,解决办法是什么?

4

2 回答 2

2
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
于 2013-10-07T18:34:40.317 回答
0

如果您对结果感到满意,array of date您可以使用简单快速的array_agg().

如果您希望数组(或列表)按特定顺序添加ORDER BY,请添加聚合函数。我在同一页引用手册:

默认情况下未指定此顺序,但可以通过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;
于 2013-10-08T01:36:24.660 回答