如何显示mysql分组中时间最大的一行记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何显示mysql分组中时间最大的一行记录相关的知识,希望对你有一定的参考价值。

参考技术A

可直接用嵌套查询。

方法如下:
如数据:
id          name
1            a
1            b
2            c
2            d
3            e
3            f
3            g
3            h
select count(t.counts) from
(select id,count(*) counts from 表名 group by id) t


这样得到的结果就是3。

如何显示mysql中的每个最大值?

【中文标题】如何显示mysql中的每个最大值?【英文标题】:How to show every max value in mysql? 【发布时间】:2011-05-17 07:52:32 【问题描述】:

我有多个具有不同时间戳的值,如下所示:

10   01:01:00
20   01:35:00
30   02:10:00
05   02:45:00
12   03:05:00
21   03:30:00
10   04:06:00
40   05:15:00

我没有可以用来分组和查找最大值的列。我想获取最大值为 30,21 和 40 的记录。数据始终采用这种格式,例如值增加,然后再次从零开始。什么查询可以帮助我找到这些记录?


为了澄清,它是按时间戳排序的,我想获取局部最大值的时间戳,即下一行具有较小值的行:

value    tmstmp
-----   --------
 10     01:01:00
 20     01:35:00
 30     02:10:00  <-- this one since next value is 5 (< 30).

 05     02:45:00
 12     03:05:00
 21     03:30:00  <-- this one since next value is 10 (< 21).

 10     04:06:00
 40     05:15:00  <-- this one since next value is 40 (< infinity).

【问题讨论】:

这两列在表格中是分开的还是同一列? @wasimbhali,我(希望)澄清了这个问题,让它更清楚。如果我的假设不正确,请告诉我。 是的,没错,这就是我想要的! 【参考方案1】:

不知何故,我不清楚你的问题。 假设第一列名为“value”,第二列名为“timestamp”。

按时间戳从组中选择 Max(value)。

【讨论】:

看我对原始问题的澄清,这就是我认为 OP 所追求的。 我无法按时间戳分组,因为它们会有所不同【参考方案2】:

这个答案可能有点晚了,但是我想我已经找到了解决方案

SELECT * FROM temp t1 WHERE value > 
  IFNULL(
    (SELECT value FROM temp t2
    WHERE t2.tmstmp > t1.tmstmp ORDER BY t2.tmstmp ASC limit 1),
   -1
  ) 
ORDER BY tmstmp ASC

澄清: 我找到值大于行中下一个值的值。 为了获得最终值,我在子查询周围添加了一个 IFNULL 以确保子查询将返回 -1

我看到的唯一问题是时间到第二天,这就是为什么我希望你也可以在它后面加上一个日期。

希望这仍然对其他人有所帮助

【讨论】:

以上是关于如何显示mysql分组中时间最大的一行记录的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 分组选出某值最大的一行数据(需要加 limit)

如何显示mysql中的每个最大值?

mysql 多次分组查询 数据最大的一行

mysql 分组总和求最大值 的两种方式

mysql - 为每组分组的 SQL 结果获取具有最大值的记录[重复]

Mysql,如何使用另一列的最大值对一组行进行分组?