前言
今天在项目上遇到了个需求,是这样的:我们数据库中有一表检测记录表
,该表中存储的是所有居民每次的检测记录,说白点就是,张三在今天检测了两次心电,那么该表中就会有两条记录,如果李四在今天检测了4次,那么表中就存的是4次的记录。如下所示:
像这样的检测记录表有9个,现在我们要实现,查询每个表中所有居民的最后一次检测记录。
sql语句
需求:查询所有居民的最后一次检测记录,包括居民信息,那么我们可以做出如下分析:
- 检测记录表需要和居民表进行关联查询,因为我们需要拿到居民的信息,在检测记录表中只有居民的id
- 在检测记录表中,需要按照居民分组查询,因为同一居民可能测多次,在表中存储的就是多次的记录。
- 需要按照检测时间降序排序检测记录表中的数据,因为我们需要知道最后一次的检测时间。
综上所述,我们就可以慢慢的整理出以下的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
这样查出来如下所示: