2017-08-16 2 views
1

これが可能かどうかわかりませんが、GROUP_CONCAT()の項目のパスを作成するのに苦労しています。私が知っているMIN()を使用することを考えずにできません。MySQL GROUP_CONCAT()他よりも最初の値を扱います

サンプルデータ

  • ID[1, 1, 1, 2, 2]
  • Number[1, 2, 3, 2, 3]
  • Leg[A-B, B-C, C-D, E-G, G-Z]

私はID12ため、このような結果を持っているしたいと思います:

  • IDPath
  • 1A-B-C-D
  • 2E-G-Z

と私は現在、次のGROUP_CONCAT()

SELECT ID, GROUP_CONCAT(CASE WHEN Number = 1 THEN Leg ELSE RIGHT(Leg, 1) END SEPARATOR '-') 
Path FROM my_table GROUP BY ID; 
を使用しています

が、これはIDためNumber列が1で起動しない場合、私は理想的な内NumberIDMIN()でそれを開始したいと思いますが、私はそれを行うことはできません動作しません。条件付きでGROUP_CONCAT()の最初の値でそれを行うにはどうしてですか?

+0

MySQL 8.0.2で利用可能なウィンドウ関数が必要です。 –

答えて

2

あなたはこのような何かを行うことができます。

SELECT ID, 
     CONCAT_WS('-', 
       SUBSTRING_INDEX(GROUP_CONCAT(LEFT(Leg, 1) ORDER BY NUMBER), ',', 1), 
       GROUP_CONCAT(RIGHT(Leg, 1) ORDER BY NUMBER SEPARATOR '-') 
       ) 
FROM my_table 
GROUP BY id; 

注:あなたのクエリは、同様にそれをセパレータを持っている必要があります。

+0

ありがとうございました。グループワイズの最小値を使っても解決できました。 –