mysql-group分组之后取每组最新的一条记录

2023-05-16

mysql-group分组之后取每组最新的一条记录

1.背景

有个业务场景需要获取每个设备最新时间的异常记录还有当前状态和部署位置,然后返回给前台渲染。记录一下写的sql以及里面一些小坑。

2.分析

首先查询涉及两张表,设备信息表和设备异常表,设备异常表需要分组之后查询每个分组最新的一条记录,然后根据设备编号关联查询设备信息表,最终将结果返回

3.建表sql以及测试数据

create table device_suspect
(
    id           int auto_increment comment '主键id自增'
        primary key,
    device_id    varchar(20) not null comment '设备编号',
    abnormal_msg varchar(30) not null comment '异常信息',
    create_time  datetime    not null comment '创建时间'
);

create table device_info
(
    device_id bigint(12)  not null comment '设备编号'
        primary key,
    state     int         null comment '设备在线状态',
    address   varchar(50) null comment '部署地址'
);

insert into lgw.device_info (device_id, state, address)
values  (10001, null, 'zg'),
        (10002, 1, 'mg'),
        (10003, 0, 'rb'),
        (10004, 1, 'hg');
        
insert into lgw.device_suspect (id, device_id, abnormal_msg, create_time)
values  (1, '10001', '设备cpu占用过高', '2023-01-03 16:54:31'),
        (2, '10002', '设备磁盘占用过高', '2023-01-03 16:54:31'),
        (3, '10003', '设备内存占用过高', '2023-01-03 16:54:31'),
        (4, '10004', '设备温度过高', '2023-01-03 16:54:31'),
        (5, '10001', '设备cpu占用过高', '2023-02-01 16:54:31'),
        (6, '10002', '设备磁盘占用过高', '2023-02-01 16:54:31'),
        (7, '10003', '设备内存占用过高', '2023-02-01 16:54:31'),
        (8, '10004', '设备温度过高', '2023-02-01 16:54:31');

4.查询sql

# 分组查询取每个分组最新的一条
# 查询每个设备最新的异常异常记录以及该设备的地址和状态
select tmp.device_id,
       tmp.abnormal_msg,
       tmp.create_time,
       case info.state
           when '0' then '在线'
           when '1' then '离线' end as state,
       info.address
from
    (select d.device_id, d.abnormal_msg, d.create_time
     from device_suspect d
     where d.id in (select max(id) from device_suspect group by device_id)
    ) tmp
left join device_info info
on info.device_id = tmp.device_id
where state is not null;

注意:

1.当前因为主键自增,id越大那么时间越新,所以可以用这种查询方式

2.left join on可以保留主表的所有记录,如果要在过滤主表记录需要写在where后面,on后面不会生效。

5.查询结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql-group分组之后取每组最新的一条记录 的相关文章

  • 斗地主之顺子

    注意 答案仅作为参考 实际考试中下列代码通过用例100 但不代表最优解 在斗地主扑克牌游戏中 扑克牌由小到大的顺序为 3 4 5 6 7 8 9 10 J Q K A 2 玩家可以出的扑克牌阵型有 单张 对子 顺子 飞机 炸弹等 其中顺子的
  • 高矮个子排队

    注意 答案仅作为参考 实际考试中下列代码通过用例100 但不代表最优解 现在有一队小朋友 他们高矮不同 我们以正整数数组表示这一队小朋友的身高 如数组 5 3 1 2 3 我们现在希望小朋友排队 以 高 矮 高 矮 顺序排列 每一个 高 位
  • java代码转python代码(需要手动调整)

    xff08 1 xff09 windows 环境安装工具 python版本 7 先下载antlr http www antlr3 org download antlr 3 1 3 tar gz 链接 https pan baidu com
  • 统计每个月兔子的总数

    题目描述 有一只兔子 从出生后第3个月起每个月都生一只兔子 小兔子长到第三个月后每个月又生一只兔子 假如兔子都不死 问每个月的兔子总数为多少 输入描述 输入int型表示month 输出描述 输出兔子总数int型 示例1 输入 9 输出 34
  • 字符串运用-密码截取

    题目描述 Catcher 是MCA国的情报员 他工作时发现敌国会用一些对称的密码进行通信 比如像这些ABBA ABA A 123321 但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解 比如进行下列变化 ABBA gt 12AB
  • 吃火锅 入职后导师

    入职后导师会请你一起吃火锅 有m个菜品 你的手速是n 即吃完一道菜 要经过时间n才能再去夹菜 任一菜品下锅后 都需要经过对应时间才能熟 过时就不可口了 怎样可以吃到最多的可口的菜 输入 第1行 菜品数量m 手速n 第2 m行 每行两个数字
  • A. Serval and Bus

    outputstandard output It is raining heavily But this is the first day for Serval who just became 3 years old to go to th
  • Redis理解

    Redis集群是一个不支持处理多个Keys的命令 因为这需要在不同的节点间移动数据 从而达不到像Redis那样的性能 xff0c 在高负载的情况下会导致错误 Redis配置文件中的一些属性 xff1a IINCLUDES模块 include
  • 甲方安全之仿真钓鱼演练(邮件+网站钓鱼)

    文章目录 一 简介1 1 前言1 2 整体思路1 3 演练所需1 4 各邮件厂商日群发上限 二 钓鱼平台搭建及配置2 1 gophish平台搭建2 2 收件目标配置 xff08 User amp Groups xff09 2 3 发信邮箱配
  • 一篇文章告诉你大数据的重要性

    在这10年中 xff0c 几乎所有行业都或多或少的受到大数据的影响 科技渗透到各个领域 xff0c 并且已经成为每个处理单元的必要元素 谈到IT行业 xff0c 具体来说 xff0c 软件和自动化是较基本的术语 xff0c 并且用于处理循环
  • 运行python代码import cv2时报错的解决方法

    我这枚python小白最近尝试使用python进行图像处理 xff0c 我是win7 43 python3 8运行环境 xff0c 运行网上的代码一直报错 xff1a ImportError No module named cv2 后来查了
  • 2、创建视图(CREATE VIEW)

    创建视图是指在已经存在的 MySQL 数据库表上建立视图 视图可以建立在一张表中 xff0c 也可以建立在多张表中 基本语法 可以使用 CREATE VIEW 语句来创建视图 语法格式如下 xff1a span class token ke
  • python ——批量读取相同格式文件(多个文件夹/单个文件夹)---nc文件为例

    在处理多个相同格式的文件时 xff0c python中的许多模块可以为我们提供很多遍历 比如 xff0c 我们想读取一个文件夹下多个相同格式的文件时 可以使用os模块 xff0c span class token keyword impor
  • python 绘制世界地图,添加海岸线、陆地、投影

    python 绘制世界地图 xff0c 添加海岸线 陆地 投影等 tips xff1a 最近在学习python的模块 xff1a matplotlib 为画全球的要素分布做准备 在此之前 xff0c 先学习一下如何绘制世界地图 xff0c
  • python matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等)

    python matplotlib axes相关属性设置 xff08 绘图方式 坐标轴 坐标刻度 文本等 xff09 最近在学习python 绘图时 xff0c 常常使用到这样一个类 xff1a matplotlib axes 其继承关系如
  • python 绘图 实现图中为字体添加下标、上标

    python 在绘图添加图例时 xff0c 一些数学符号或者公式常常包含上标和下标 xff0c 这里简单描述了如何实现上述要求 在数学公式中 xff0c 上标用 号 xff0c 下标用 符号 如果上下标只有一个符号 xff0c 则可以不用花
  • python 将绘制的图片保存为矢量图格式(svg)

    python 将绘制好的的图片保存输入文件夹 span class token keyword import span numpy span class token keyword as span np span class token k
  • python 实现不同分辨率的海洋气象数据,线性插值成统一的分辨率(以nc文件为例)

    最近 xff0c 在处理SST以及OLR数据时 xff0c 需要将两组不同的分辨率的数据插值统一分辨率 其中 xff0c SST的水平网格分辨率为1 1 xff0c OLR的水平网格分辨率为2 5 2 5 我需要将SST的数据插值为2 5
  • cdo (Climate Data Operators ) 常用命令介绍:(查看文件信息、多文件合并、数据裁剪、数据插值、数据计算。。)

    cdo介绍 xff1a 一款极其强大方便的通过命令行进行气象数据处理与分析的软件 xff0c 全称为 xff1a Climate Data Operators CDO CDO is a command line suite for mani
  • Ubuntu下编译安装Qt

    一 源代码的获取 官网http qt nokia com downloads xff0c 最新的是4 8 2版本 二 解压代码 tar zxvf qt everywhere opensource src 4 8 2 tar gz 解压完进入

随机推荐