草庐IT

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

coder 2023-10-11 原文

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

我有 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/

有关mysql 从连续行中选择最大的字段值的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  3. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  4. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  5. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  6. ruby-on-rails - Sphinx - 何时对字段使用 'has' 和 'indexes' - 2

    我几天前在我的ruby​​onrails2.3.2上安装了Sphinx和Thinking-Sphinx,基本搜索效果很好。这意味着,没有任何条件。现在,我想用一些条件过滤搜索。我有公告模型,索引如下所示:define_indexdoindexestitle,:as=>:title,:sortable=>trueindexesdescription,:as=>:description,:sortable=>trueend也许我错了,但我注意到只有当我将:sortable=>true语法添加到这些属性时,我才能将它们用作搜索条件。否则它找不到任何东西。现在,我还在使用acts_as_tag

  7. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  8. ruby-on-rails - 如何为空白字段编写 rspec? [Rails3.1] - 2

    我使用rails3.1+rspec和factorygirl。我对必填字段(validates_presence_of)的验证工作正常。我如何让测试将该事实用作“成功”而不是“失败”规范是:describe"Addanindustrywithnoname"docontext"Unabletocreatearecordwhenthenameisblank"dosubjectdoind=Factory.create(:industry_name_blank)endit{shouldbe_invalid}endend但是我失败了:Failures:1)Addanindustrywithnona

  9. ruby-on-rails - 需要帮助最大化多个相似对象中的 3 个因素并适当排序 - 2

    我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night

  10. ruby-on-rails - 在具有 ActiveRecord 条件的相关模型中按字段排序 - 2

    我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我

随机推荐