如何显示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)