ゆるふわめも

東京か京都にいます。

BigQueryでGROUP_CONCATを用いて特定のカラムをソートしてまとめてしまう

やりたいこと

id product_id buy_date
0 a 2011-11-01
1 b 2011-11-03
1 c 2011-11-02

から

id dates product_history
0 2011-11-01 a
1 2011-11-02_2011-11-03 c_b

を取得したい。

コード

SELECT 
  id,
  GROUP_CONCAT( STRING(dayofyear_index), '_') as dates,
  GROUP_CONCAT( product_name , '_') as product_history 
FROM
  ( SELECT
      DAYOFYEAR(buy_date) as dayofyear_index,
      product_id as product_name
    FROM
      [project:table_name]
    WHERE
      ...
    ORDER BY 
      dayofyear_index
  )
GROUP BY
  id
HAVING
  ...

説明

先に時系列でソートしたテーブルを作ってしまい、それをGROUP_CONCATでまとめる。