2017-08-16 162 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]

我想有這樣的結果的12ID

  • 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; 

但這不工作時的IDNumber列不從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

謝謝,我能夠使用groupwise minimum來解決。 –

相關問題