mysql实现查询分组查询最后一次的记录

Posted 穆雄雄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql实现查询分组查询最后一次的记录相关的知识,希望对你有一定的参考价值。

大家好,我是雄雄。

前言

又好久没有写博客了,为什么呢?因为最近没怎么写代码…说起来也惭愧。

今天在项目上遇到了个需求,是这样的:我们数据库中有一表检测记录表,该表中存储的是所有居民每次的检测记录,说白点就是,张三在今天检测了两次心电,那么该表中就会有两条记录,如果李四在今天检测了4次,那么表中就存的是4次的记录。如下所示:


像这样的检测记录表有9个,现在我们要实现,查询每个表中所有居民的最后一次检测记录。

sql语句

需求:查询所有居民的最后一次检测记录,包括居民信息,那么我们可以做出如下分析:

  1. 检测记录表需要和居民表进行关联查询,因为我们需要拿到居民的信息,在检测记录表中只有居民的id
  2. 在检测记录表中,需要按照居民分组查询,因为同一居民可能测多次,在表中存储的就是多次的记录。
  3. 需要按照检测时间降序排序检测记录表中的数据,因为我们需要知道最后一次的检测时间。

综上所述,我们就可以慢慢的整理出以下的sql,如下所示:

SELECT
    lm.name AS NAME,
    T1.heartratenum AS heartratenum,
    T1.ai_remark AS ai_remark,
    T1.dr_remark AS dr_remark,
    T1.create_time AS create_time,
    T1.user_id AS user_id,
    T1.member_id AS member_id,
    T1.sys_org_code AS sys_org_code,
    lm.birthday AS birthday,
    lm.sex AS sex,
    lm.phone AS phone,
    DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), lm.birthday)), '%Y')+0 AS age
FROM (SELECT A.* 
      FROM(SELECT A.*,
                  @row_number := IF(@member_id = A.member_id OR @member_id IS NULL,@row_number + 1,1) AS RN,
                  @member_id := A.member_id AS member_id1
           FROM lt_ecg A,(SELECT @row_number := 0) B,(SELECT @member_id := NULL) C
           ORDER BY A.member_id,A.measure_time DESC) A
   WHERE A.RN = 1) T1
INNER JOIN lt_member lm
   ON T1.member_id = lm.id


这样查出来如下所示:

以上是关于mysql实现查询分组查询最后一次的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用聚合函数在 MySQL 查询中获取分组记录的第一条和最后一条记录?

c#能不能实现在dataTable里查询并分组

Mysql之分组查询

EasyClick 之 MySQL 分组查询

EasyClick 之 MySQL 分组查询

如何按列名分组并确保查询检索到最后一次更新