簡體   English   中英

mysql 在最小值之后得到最大值

[英]mysql get max value after min value

在 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,值 1.40)

我需要哪個 sql 查詢?

你可以運行這樣的東西:

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 |
+------+---------------------+------+

這個想法是首先使用來自 t 的select min(vl) from tt中獲取最小值。

然后,我們使用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)
  )

然后,我們得到具有該最大值的行。

我會使用子查詢和限制。 表名和列名只是一個示例,因此請將其調整為您正確的表名和列。 祝你好運

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM