我坚持这个问题。我需要按日期进行分组,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
任何关于此的亮点都将受到赞赏。谢谢你的阅读。
答案 0 :(得分:2)
这是一种方法。基于示例数据(不是查询):
select s.*
from sample s
where s.hits = (select max(s2.hits)
from sample s2
where date(s2.date) = date(s.date)
);
您尝试的查询似乎与示例数据没有任何关系,因此不清楚如何合并这些表(尝试的查询具有不同的列和两个表)。