1.条件:报警信息表sensor_warning

2.需求:

查询当前车厢的、不同设备的、所有处理未完成的、不同报警原因的、时间最新的数据集合,最后按设备id或报警时间排序

3.原始sql,不满足实际情况

SELECT
a.id,
a.sensor_type,
a.device_status,
a.train_no,
a.device_id,
a.sensor_no,
a.carriage_no,
a.process_progress,
a.handle_person,
a.create_time,
a.position,
a.update_time,
a.reason
FROM
sensor_warning AS a
JOIN (
SELECT
max( b.device_id ) AS device_id,
max( b.create_time ) AS create_time
FROM
sensor_warning AS b
WHERE
b.process_progress IN ( '0', '1' )
AND warning_type = 0
AND b.carriage_no = 'CARID-008'
GROUP BY
b.device_id
) AS m ON a.device_id = m.device_id
AND a.create_time = m.create_time
ORDER BY
a.device_id

4.为什么不满足实际情况?

上面的sql只能查出当前车厢的、不同设备的、所有处理未完成的、时间最新的数据集合。并没有根据reason分类。

而且这里reason字段中的数据还比较特殊,例举reason字段中的个别报警原因就知道了:

转向架振动超阈值:1.23m/s²;
转向架振动超阈值:0.48m/s²
车体振动超阈值:-0.24m/s²
车体振动超阈值:-0.55m/s²

我们可以看到reason中存在数值,如果按照上面的sql查询,那么上述的4条数据都会被查出来,而实际上只有两条数据才是我们想要的结果。

5.mysql解决方案

使用字符串截取函数SUBSTRING_INDEX(),按照冒号截取,因为数据中有中文冒号和英文冒号所以这里做了两次截取。

SELECT
a.device_id,
SUBSTRING_INDEX( SUBSTRING_INDEX( a.reason, ':', 1 ), ':', 1 ) reason,
max(a.create_time) AS create_time
FROM
(
SELECT
id,
sensor_type,
device_status,
train_no,
device_id,
sensor_no,
carriage_no,
process_progress,
handle_person,
create_time,
position,
update_time,
reason
FROM
sensor_warning
WHERE
process_progress IN ( '0', '1' )
AND warning_type = 0
AND carriage_no = 'CARID-008'
ORDER BY
create_time DESC
) a
GROUP BY
a.device_id,
SUBSTRING_INDEX( SUBSTRING_INDEX( a.reason, ':', 1 ), ':', 1 ) ORDER BY a.device_id

6.达梦数据库解决方案

(ps:同orcale)

然而达梦数据库中并不支持SUBSTRING_INDEX()函数,达梦这里使用substr()函数。

substr函数格式 (字符截取函数)

  格式1: substr(string string, int a, int b);

  格式2:substr(string string, int a) ;

解析:

    格式1:
1、string 需要截取的字符串
2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
3、b 要截取的字符串的长度 格式2:
1、string 需要截取的字符串
2、a 可以理解为从第a个字符开始截取后面所有的字符串。

6.1.达梦数据库解决方案1

SELECT
a.id,
a.device_id,
a.create_time,
a.reason
FROM
sensor_warning AS a
JOIN (
SELECT
b.device_id device_id,
substr( b.reason, 1, 7 ) reason,
max( b.id ) AS id,
max( b.create_time ) AS create_time
FROM
sensor_warning AS b
WHERE
process_progress IN ( '0', '1' )
AND warning_type = 0
AND carriage_no = 'CARID-008'
GROUP BY
b.device_id,
substr( b.reason, 1, 7 )
) AS m ON a.id = m.id
ORDER BY
a.create_time

6.2.达梦数据库解决方案2

SELECT
a.device_id,
substr( a.reason, 1, 7 ) reason,
max( a.create_time ) AS create_time
FROM
(
SELECT
id,
device_id,
carriage_no,
create_time,
reason
FROM
sensor_warning
WHERE
process_progress IN ( '0', '1' )
AND warning_type = 0
AND carriage_no = 'CARID-008'
) a
GROUP BY
a.device_id,
substr( a.reason, 1, 7 )
ORDER BY
a.create_time

查询满足条件的最新数据(逐步优化,mysql、达梦数据库)的更多相关文章

  1. DB 查询分析器 6.03 如何灵活、快捷地操作国产达梦数据库

    DB 查询分析器 6.03 如何灵活.快捷地操作国产达梦数据库 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 摘要       本文详细地介绍了"万能数据库查询分析器&qu ...

  2. sql 查询某个条件多条数据中最新的一条数据或最老的一条数据

    sql 查询某个条件下多条数据中最新的一条数据或最老的一条数据 test_user表结构如下: 需求:查询李四.王五.李二创建的最初时间或者最新时间 1:查询最初的创建时间: SELECT * FRO ...

  3. 读取大csv文件数据插入到MySql或者Oracle数据库通用处理

    import java.io.BufferedInputStream; import java.io.BufferedReader;import java.io.BufferedWriter;impo ...

  4. 关系型数据库 和 非关系型数据对比 以及 MySQL与Oracle对比

    一.关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库.    关系模型1970年提出的,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型.    简单来说,关系模型指的 ...

  5. 数据库周刊30丨数据安全法草案将亮相;2020数据库产业报告;云南电网上线达梦;达梦7误删Redo Log;Oracle存储过程性能瓶颈;易鲸捷实践案例……

    摘要:墨天轮数据库周刊第30期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.数据安全法草案即将亮相:将确立数据分级分类管理.应急处置制度[摘要]数据安全法草案即将在本 ...

  6. MySQL分页查询大数据量优化方法

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N适应场景: 适用于数据量较少的情况(元组百/千级)原因/缺点: ...

  7. DB2大数据量优化查询解决方案

    利用DB2表分区的功能对大数据量的表进行分区,可以优化查询. 表分区介绍: 表分区是一种数据组织方案,它根据一列或多列中的值把表数据划分为多个称为数据分区 的存储对象. (我觉得表分区就类似于Wind ...

  8. C#开发BIMFACE系列16 服务端API之获取模型数据1:查询满足条件的构件ID列表

    系列目录     [已更新最新开发文章,点击查看详细] 源文件/模型转换完成之后,可以获取模型的具体数据.本篇介绍根据文件ID查询满足条件的构件ID列表. 请求地址:GET https://api.b ...

  9. easyUI datagrid 根据查询条件 选中对应数据的行

    开始 输入了 土豆,南瓜,再次是小青菜,每次输入点击搜索的时候(模糊查询),选中的当前数据对应的行 在做之前,在网上查询了许多资料,也在技术群里问过许多次,弄了好久终于好了. 第一次写博客真不知道写啥 ...

随机推荐

  1. mybatis foreach collection

    原文传递:https://blog.csdn.net/qq_24084925/article/details/53790287 foreach元素的属性主要有 item,index,collectio ...

  2. quic 2 ietf-transport-draft-ietf-quic-transport-09

    quic的优点 Low-latency connection establishment Multiplexing without head-of-line blocking Authenticate ...

  3. 一篇文章了解_unittest

    1. 基本概念 2018年10月7日 星期日 11:39 unittest是python自带的单元测试框架,有时候又被称为"PyUnit",是python版本的JUint实现. 该 ...

  4. 早期javac编译器优化

    学习<深入了解Java虚拟机>有一段时间了,大概理解了Java从源代码编译到执行出结果的过程,也能明确的知道Java是半解释性语言.在执行源代码时,先通过Javac编译器对源代码进行词法分 ...

  5. MAC系统网页链接如何下载

    Folx 5 是一款简单易用.功能强大的Mac OS系统的下载管理器.Folx界面简洁,下载管理方便,支持网页链接下载.BT下载和YouTube下载,而且还可以设置计划任务.搜索BT种子以及添加Tra ...

  6. Ubuntu sudo 出现unable to resolve host 解决方法

    Ubuntu sudo 出现unable to resolve host 解决方法 Ubuntu环境, 假设这台机器名字叫abc(机器的hostname), 每次执行sudo 就出现这个警告讯息: s ...

  7. js 时间日期与时间戳之间转换

    1 1.将时间(2017-08-10)转换时间戳 2 var startTime = '2017-08-10'; 3 var startdate = new Date(Date.parse(start ...

  8. 将input 的文本框改为不可编辑状态

    <input type="text" id = "textid" name="名称" value="值" size ...

  9. SRX_Test_2_sound

    声音(sound) [问题描述] 雅礼中学的校门口在修建地铁,而由此带来的噪音问题让周边的居民困扰不已.环保局正在研究 一项评估模型,可以定量评价噪音的危害程度.这项评估模型是这样的:将每一条街道视作 ...

  10. Windows/Linux 代码共享,开发者称此举使Linux有了更差的结局

    英特尔近期披露了 Linux 图形驱动程序相关的一些细节并指出,英特尔的图形驱动程序现在已在 Windows/Linux 之间共享约 60% 的代码库,90~100% 的性能. 针对此事,红帽公司的高 ...