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

Posted

技术标签:

【中文标题】如何显示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 问答

mysql从表中显示数据最大值和总和

LibreOffice Calc:如何一次突出显示单元格范围的最大值?

MYSQL各字段的长度是多少

mysql查询分组中最大的值

如何将每个值与列表对象中每个元素中的最大值相除