2017-04-06 60 views
0

我有2個表:MySQL的 - 參加一個查詢

導致

 
|lead_id|name| 
|  1| a| 
|  2| b| 
|  3| c| 
lead_phases
 
|phase_id|phase_lead_fk|phase_sort|phase_status| 
|  1|   1|   1|   1| 
|  2|   1|   2|   0| 
|  3|   2|   3|   1| 
|  4|   2|   1|   0| 
|  5|   2|   2|   0| 
|  6|   3|   1|   0| 
|  7|   3|   2|   1| 

我必須寫一個查詢其顯示連接表由lead_id和列phase_sort的最高值分組。

的結果,我希望收到:

 
|lead_id|name|phase_id|phase_sort|phase_status| 
|  1| a|  2|   2|   0| 
|  2| b|  3|   3|   1| 
|  3| c|  7|   7|   1| 

我的查詢:

 
SELECT phase_id,phase_lead_fk,phase_sort,phase_status 
FROM leads 
LEFT JOIN lead_phases ON lead_id=phase_lead_fk 
GROUP BY lead_id 

+0

這GROUP BY是無效的,甚至不會在較新版本的MySQL執行(除非在兼容模式下)。一般GROUP BY規則說:如果指定了GROUP BY子句,則SELECT列表中的每個列引用都必須標識一個分組列或者是一個set函數的參數。 – jarlh

+0

您需要一個使用GROUP BY的子查詢來返回每個lead_id的最高phase_sort。加入那個結果。 – jarlh

回答

0

你需要做的這兩個步驟

select phase_lead_fk, max(phase_sort) 
from lead_phases 
group by phase_lead_fk 

這將返回hights排序值爲每根引線;那麼你可以用兩個原始表加入它使用這個結果作爲過濾器

select * 
from leads t1 
join lead_phases t2 
on  t1.lead_id = t2.phase_lead_fk 
join (
      select phase_lead_fk, max(phase_sort) max_phase_sort 
      from lead_phases 
      group by phase_lead_fk 
     ) t3 
on  t2.phase_lead_fk = t3.phase_lead_fk and 
     t2.phase_sort = t3.max_phase_sort