【问题标题】:mysql group by day and count then filter only the highest value for each daymysql 按天分组并计数,然后只过滤每天的最大值
【发布时间】:2016-07-18 08:10:14
【问题描述】:

我被这个查询卡住了。我需要按日期、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 分组并过滤较高的命中结果,每个日期只显示一行。好像我用 group by 运行 max(hits) 但我不会工作

喜欢:

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

我们将不胜感激。感谢阅读。

【问题讨论】:

  • 您的查询有两个表。您的示例数据只有一个。

标签: mysql sql count group-by max


【解决方案1】:

这是执行此操作的一种方法。基于您的 sample 数据(不是查询):

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多