gpt4 book ai didi

mysql 从连续行中选择最大的字段值

转载 作者:可可西里 更新时间:2023-11-01 07:34:25 25 4
gpt4 key购买 nike

第一次在这里提问,请多多关照:)

我有 2 个表:

  • “Master”——一个不断增长的日志
  • “当前”- 用最新条目更新的单行

我正在尝试从“master”中与第二个表(单行)中的“name”匹配的行的连续 block (​​名称)中选择最大的“峰值”行。此连续 block 必须是表中最新的连续 block 。

所以正确的结果应该是:

17   | 2016-03-12 23:57:00 | 190    | Tracey

大师:

id   | date time           | peak   | name
-------------------------------------------------
01 | 2016-03-12 23:41:00 | 201 | Tracey
02 | 2016-03-12 23:42:00 | 107 | Tracey
03 | 2016-03-12 23:43:00 | 103 | Tracey
04 | 2016-03-12 23:44:00 | 195 | Tracey
05 | 2016-03-12 23:45:00 | 134 | Tracey
06 | 2016-03-12 23:46:00 | 144 | Ian
07 | 2016-03-12 23:47:00 | 155 | Ian
08 | 2016-03-12 23:48:00 | 166 | Ian
09 | 2016-03-12 23:49:00 | 132 | Ian
10 | 2016-03-12 23:50:00 | 112 | Ian
11 | 2016-03-12 23:51:00 | 143 | Steve
12 | 2016-03-12 23:52:00 | 165 | Steve
13 | 2016-03-12 23:53:00 | 122 | Steve
14 | 2016-03-12 23:54:00 | 123 | Steve
15 | 2016-03-12 23:55:00 | 132 | Steve
16 | 2016-03-12 23:56:00 | 143 | Steve
17 | 2016-03-12 23:57:00 | 190 | Tracey ----
18 | 2016-03-12 23:58:00 | 165 | Tracey |
19 | 2016-03-12 23:59:00 | 154 | Tracey | latest
20 | 2016-03-13 00:00:00 | 131 | Tracey | contiguous
21 | 2016-03-13 00:01:00 | 167 | Tracey | block
22 | 2016-03-13 00:02:00 | 178 | Tracey ----

当前:

id   | date time           | peak   | name
---------------------------------------------
01 | 2016-03-13 00:02:00 | 178 | Tracey

@EhsanT 的更新

我试过:

SET @name = 'Tracey';
SELECT * FROM `Master`
WHERE `name` = @name
AND `id` > (
SELECT max(`id`)
FROM `Master`
WHERE `name` != @name
AND `id` < (
SELECT max(`id`)
FROM `Master`
WHERE `name` = @name
)
)
ORDER BY peak DESC
LIMIT 1

最佳答案

这个答案的最佳实践是使用过程

由于我不是编写过程的专家,您可以使用下面的代码,但是在运行这段代码之前您应该做一些验证,比如检查传递给代码的名称是否存在在 Master 表中,或者如果表中此名称之前还有其他名称,则只有此名称在 Master 表中。

假设 Master 表中有很多记录,并且上述两个条件都正确,那么这段代码将为您完成这项工作:

select max(`peak`)
from `Master`
where `name` = 'Tracey'
and `id` > (
select max(`id`)
from `Master`
where `name` != 'Tracey'
and `id` < (
select max(`id`)
from `Master`
where `name` = 'Tracey'
)
)

另外我相信你知道这一点,但是如果你想要整个记录数据,你只需要将记录按peak降序排列并以1为限。

所以最终的查询会是这样的:

select *
from `Master`
where `name` = 'Tracey'
and `id` > (
select max(`id`)
from `Master`
where `name` != 'Tracey'
and `id` < (
select max(`id`)
from `Master`
where `name` = 'Tracey'
)
)
order by peak desc
limit 1

关于mysql 从连续行中选择最大的字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35965601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com