我有一个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的分组。所以我在这里问。
答案 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;