【问题标题】:How to get maximum number of records per day? max(count) MySQL DB如何获得每天的最大记录数?最大(计数) MySQL 数据库
【发布时间】:2020-08-01 17:38:49
【问题描述】:

美好的一天!

我有一张桌子:

create table table_1 (field_1 varchar (10),  timestamp datetime(3),  field_2  varchar (10));

日期格式 yyyy-mm-ddthh:mm:ss.000z.

我需要计算每小时的记录数,并获得每天这些记录的最大数量。

请求:

select date_format(date,'%Y.%m.%d') as date, max(summ)  from (select date_format(timestamp,'%Y.%m.%d %H' ) as date, count(field_2) as summ from table_1 a where field_1 in (1) group by date) b group by date;

结果:

date        summ
2019.12.25  2
2019.12.25  3
2019.12.25  12

但我需要这样的总结:

date        summ
2019.12.25  12
2019.12.26  15
2019.12.27  14

【问题讨论】:

  • 指定 MySQL 版本。
  • 结果: ... 但我需要这样的总结: 提供 INSERT INTO 示例数据,该数据给出并且必须给出发布的输出。跨度>
  • 如果你设置了一个 sql fiddle,你会很快得到答案。比命令更好,因为它减少了进入的障碍。
  • @DanielFarrell:小提琴很好,如果它另外提供给 DDL 和 DML。但 DDL 和 DML 应始终在问题本身中提供。这样,问题不取决于小提琴网站是否可用,如果小提琴网站出现故障,它对未来的读者毫无用处。
  • 是的,抱歉,并不是建议不要将数据放入问题中。始终将所有相关数据放在问题中,但小提琴可以在我自己设置 sql 表的情况下使其可验证和可重现。

标签: mysql sql select


【解决方案1】:

你可以使用聚合窗口函数:

select t.*
from (select date_format(timestamp, '%Y.%m.%d %H') as date, count(field_2) as summ,
             row_number() over (partition by date(timestamp) order by count(field_2) desc) as seqnum
      from table_1 a
      where field_1 in (1)
      group by date, date(timestamp)
     ) t
where seqnum = 1;

Here是代码正确运行的演示。

【讨论】:

  • 不幸的是,它不起作用,因为 - 'select' 在此服务器版本的此位置无效。版本 - 8.0.19
  • @Riot 。 . . order by 中的最大值应该是 desc
  • 是的,现在它的工作,但结果不正确:2019.12.25 20 1 1 2019.12.26 00 1 1 我这样解决它:select date_format(date,'%Y.%m.%d') as date, max(summ) from (select date_format(date,'%Y.%m.%d') as date, summ from (select date_format(timestamp,'%Y.%m.%d %H' ) as date, count(field_2) as summ from table_1 f where field_1 in (1) group by date) v group by date) e group by date; 结果:2019.12.25 12 2019.12.26 11 但它不是很好的解决方案。
猜你喜欢
  • 2015-06-04
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多