mysql group by day and count然后只过滤每天的最高值

时间:2016-03-30 11:01:01

标签: mysql sql count group-by max

我坚持这个问题。我需要按日期进行分组,card_id并且只显示最高的命中率。我有这些数据:

date        card_name     card_id   hits
29/02/2016  Paul Stanley    1345    12
29/02/2016  Phil Anselmo    1347    16
25/02/2016  Dave Mustaine   1349    10
25/02/2016  Ozzy            1351    17
23/02/2016  Jhonny Cash     1353    13
23/02/2016  Elvis           1355    15
20/02/2016  James Hethfield 1357    9
20/02/2016  Max Cavalera    1359    12

目前我的查询

SELECT DATE(card.create_date) `day`, `name`,card_model_id, count(1) hits
FROM card
Join card_model ON card.card_model_id = card_model.id
WHERE DATE(card.create_date) >= DATE(DATE_SUB(NOW(), INTERVAL 1 MONTH)) AND card_model.preview = 0
GROUP BY  `day`, card_model_id 
;

我想按日期分组,card_id并过滤较高的匹配结果,每个日期只显示一行。好像我用分组运行max(命中),但我不会工作

像:

date        card_name     card_id   hits
29/02/2016  Phil Anselmo    1347    16
25/02/2016  Ozzy            1351    17
23/02/2016  Elvis           1355    15
20/02/2016  Max Cavalera    1359    12

任何关于此的亮点都将受到赞赏。谢谢你的阅读。

1 个答案:

答案 0 :(得分:2)

这是一种方法。基于示例数据(不是查询):

select s.*
from sample s
where s.hits = (select max(s2.hits)
                from sample s2
                where date(s2.date) = date(s.date)
               );

您尝试的查询似乎与示例数据没有任何关系,因此不清楚如何合并这些表(尝试的查询具有不同的列和两个表)。