按月分组最大'n'

时间:2014-12-15 12:14:45

标签: mysql greatest-n-per-group

我有一个mysql表,其中包含一个人的日期,姓名和评级。我需要构建一个查询来显示每个月的最佳人选。上面的查询给出了月份的最大评级,但是人名错误。

SELECT DATE_FORMAT(date,'%m.%Y') as date2, MAX(rating), name FROM test GROUP BY date2

这里有样本表的sqlfiddle:http://sqlfiddle.com/#!2/4dd54b/9

我读了几个最好的每组n个主题,但这些查询没有用,我想这是因为DATE_FORMAT的分组。所以我在这里问。

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用substring_index() / group_concat()技巧:

  SELECT DATE_FORMAT(date, '%m.%Y') as date2, MAX(rating),
         substring_index(group_concat(name order by rating desc), ',', 1) as name
  FROM test
  GROUP BY date2;

答案 1 :(得分:0)

更快的解决方案可能看起来像这样 - 虽然完全删除DATE_FORMAT功能会加快速度......

SELECT x.* 
  FROM test x
  JOIN
     ( SELECT DATE_FORMAT(date,'%Y-%m') dt
            , MAX(rating) max_rating 
         FROM test 
        GROUP
           BY DATE_FORMAT(date,'%Y-%m')
     ) y
    ON y.dt = DATE_FORMAT(x.date,'%Y-%m')
   AND y.max_rating = x.rating;