mysql在最小值后获取最大值

Posted

技术标签:

【中文标题】mysql在最小值后获取最大值【英文标题】:mysql get max value after min value 【发布时间】:2021-06-02 14:14:53 【问题描述】:

mysql表中,我想得到最小值之后的最大值。

SELECT * from `table`
result:

id  date                 value
--  -------------------  -----
1   2021-03-03 13:14:05  1.15
2   2021-03-03 13:14:06  1.32
3   2021-03-03 13:14:07  1.40
4   2021-03-03 13:14:08  1.38
5   2021-03-03 13:14:01  1.55
6   2021-03-03 13:14:02  1.60
7   2021-03-03 13:14:03  1.30
8   2021-03-03 13:14:04  1.10

但我必须按日期排序,

SELECT * from `table` ORDER by date
result:

id  date                 value
--  -------------------  -----
5   2021-03-03 13:14:01  1.55
6   2021-03-03 13:14:02  1.60 # this is not target row.
7   2021-03-03 13:14:03  1.30
8   2021-03-03 13:14:04  1.10 # min value
1   2021-03-03 13:14:05  1.15
2   2021-03-03 13:14:06  1.32
3   2021-03-03 13:14:07  1.40 # this is TARGET row.(max after min)
4   2021-03-03 13:14:08  1.38

按日期排序后, 我想得到最小值(1.10)之后的最大值(1.40)

id 6,值 1.60 不是目标行。 因为这个最大值(1.60)不是在最小值(1.10)之后

id 3,值 1.40 是目标行。 因为这个最大值(1.40)在最小值(1.10)之后 最小值之前的所有值都应该被忽略。 我想得到这一行(id 3, value 1.40)

我需要哪个 sql 查询?

【问题讨论】:

您能否编辑问题以更清楚地显示目标结果? 【参考方案1】:

我会使用子查询和限制。表名和列名只是一个示例,因此请将其调整为您正确的表名和列。祝你好运

select * from table 
inner join (
    select id as minvalid, min(value) as minvalue from table 
) subQuery on value > minvalue 
limit 1

【讨论】:

这是不正确的。 select id as minvalid, min(value) 可能返回与包含min(value) 的行无关的minvalid。您需要添加另一个层来获取相关 ID,就像 zedfoxus 所做的那样。 确认同意,谢谢指出。【参考方案2】:

你可以这样运行:

select * from t
where vl = (
  select max(vl) from t
  where dt > (
    select dt from t where vl = (select min(vl) from t)
  )
);

+------+---------------------+------+
| id   | dt                  | vl   |
+------+---------------------+------+
|    3 | 2021-03-03 13:14:07 | 1.40 |
+------+---------------------+------+

想法是首先使用select min(vl) from t 从表t 中获取最小值。

然后,我们使用select dt from t where vl = (select min(vl) from t) 获取看到该值的日期。

然后,我们得到在该日期之后显示的最大值:

select max(vl) from t
  where dt > (
    select dt from t where vl = (select min(vl) from t)
  )

然后,我们得到具有该最大值的行。

【讨论】:

以上是关于mysql在最小值后获取最大值的主要内容,如果未能解决你的问题,请参考以下文章

最小二乘法和最大似然估计的联系和区别(转)

MySql怎样获取一列中最大值

通过 MySQL 一起获取最大记录和最小记录

mysql 怎么获取最大值的那条记录

设置值后 pyQt 进度对话框保持为空

找出一组数组中最大值最大值的角标最小值最小值的角标及平均数