2016-11-23 56 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