2016-11-23 50 views
2

我有一個表medic_appointment與以下字段:datetime_diagnosisDATETIME類型)和diagnosis。我需要執行一個查詢,它會顯示出每種疾病發生率最高的YEAR_MONTHSQL:如何使多個COUNT/MAX

我目前在這一點上:

SELECT disease , COUNT(*) AS frequency , 
     EXTRACT(YEAR_MONTH FROM datetime_diagnosis) AS interval 
FROM medic_appointment 
GROUP BY disease , interval 

導致下面的示例表:

disease frequency interval 
-------- --------- -------- 
disease1 5   201609 
disease1 8   201610 
disease1 22   201611 
disease1 1   201612 
disease2 7   201611 

我試圖做這樣的事情:用上面提到的查詢,增加它以這種方式,它會選擇最高頻率的數字,並返回間隔和疾病領域,然後按疾病分組......但它不是以這種方式工作,我只是找不到另一種方法來弄清楚。不知道這是否是最佳選擇。

編輯:預期的結果:

disease frequency interval 
-------- --------- -------- 
disease1 22   201611 
disease2 7   201611 
+2

提供文字預期的結果是非常複雜的理解。提供預期的結果集。 – Viki888

回答

0

試試這個:

SELECT disease, frequency, interval 
FROM (
    SELECT disease, frequency, interval, 
     @rnk := IF(@dis = disease, @rnk + 1, 
        IF(@dis := disease, 1, 1)) AS rnk 
    FROM (
    SELECT disease, COUNT(*) AS frequency, 
      EXTRACT(YEAR_MONTH FROM datetime_diagnosis) AS interval 
    FROM medic_appointment 
    GROUP BY disease, interval) AS t 
    CROSS JOIN (SELECT @rnk := 0, @dis := '') AS vars 
    ORDER BY disease, frequency DESC) AS x 
WHERE x.rnk = 1 
+0

我試過這個,但得到一個錯誤。 MySQL指出了@dis:= disease,1,1)的語法錯誤...我仍然試圖理解這段代碼(以前從未見過類似的東西),所以它可能需要一段時間:(但是感謝你展示這個使用SQL代碼的新方法 – Rodrigo

+0

@Rodrigo請檢查我編輯的編輯 –

+0

仍然沒有成功:(不斷告訴我第4行附近有一些語法錯誤(以@rnk開頭:= ... – Rodrigo