0

列に重複する値を含むテーブルがありますc1, c2, c3, c4, c5
group by 関数によって生成された値を含む行のすべての日付を一覧表示したいと考えています。

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 に答える