在做项目的时候需要实现一个多表左联加分组查询的逻辑。
下图是前端要显示的数据:

数据来源于三张表:

  • ETC表:cap_etc
  • 车辆表:cap_vehicle
  • ETC消费表:cap_etc_record

下图是后台的三张数据表:
cap_etc:

cap_vehicle:

cap_etc_record:

涉及的问题:

  1. 如何将三张表的数据联系起来
  2. 前台显示的最近消费时间如何获取
  • 端显示数据的主体是ETC数据表里的数据,其中车型、最近消费时间、余额这三个字段即使没有查到,也要显示主体的ETC表数据,所以对于三张表数据的联查,要使用左联查询,将ETC表作为主表,左联车辆表和消费记录表
    ETC连接车辆表的字段为:车牌号 vehicle_num
    ETC连接消费表的字段为:绑定消费表字段 etc_id
    所以到目前为止,可以将三张表进行左联查询,其中sql语句为:
SELECTce.id,ce.etc_account,ce.etc_status,ce.vehicle_num,cer.card_balance,use_time
FROMcap_etc ce
LEFT JOIN cap_vehicle cv ON ce.vehicle_num = cv.vehicle_num
LEFT JOIN cap_etc_record cer ON cer.id = ce.id

目前为止,已经使用左联查询将三张表连接起来了,不过对于第二个问题还没有解决,一张etc卡会有多条消费记录,其中前端要显示最近的一条消费记录,那么现在的问题就是:

  • 要找到每一张etc卡对应的最近消费时间

这时候我们就要通过ETC的id来分组,查询对应一组消费记录中的最近消费时间:
如何查询一组数据中的最近消费时间呢?
我们可以用用order by来获取最近的一条消费记录,注意要加一个limit限定,只查询出一条记录

SELECT id FROM cap_etc_record r ORDER BY r.use_time DESC LIMIT 1

最近消费时间也查出来了,现在只剩下ETC卡id分组了,分组的话可直接使用group by
但是在这个业务逻辑中,我们使用可直接通过查条件来实现分组,以下是完整的查询sql语句:

SELECTce.id,ce.etc_account,ce.etc_status,ce.vehicle_num,cer.card_balance,use_time
FROMcap_etc ceINNER JOIN cap_vehicle cv ON ce.vehicle_num = cv.vehicle_numLEFT JOIN cap_etc_record cer ON cer.id = ( SELECT id FROM cap_etc_record r WHERE r.etc_id = ce.id ORDER BY r.use_time DESC LIMIT 1 )

至此,这个问题就解决了。

mysql多表左联分组查询相关推荐

  1. mysql 两表关联 分组查询

    最近有个预约需求 记录一下 sql 思路 两张表 A Ba 表记录每个预约时间点和这个时间点可预约人数b 表 记录每条预约记录最后结果得出 本时间段可预约的数量 <?phpuse Illumin ...

  2. MySQL对数据表进行分组查询(GROUP BY)

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  3. MYSQL 单表一对多查询,将多条记录合并成一条记录

    MYSQL 单表一对多查询,将多条记录合并成一条记录 一.描述: 在MySQL 5.6环境下,应工作需求:将一个表中多条某个相同字段的其他字段合并(不太会表达,有点绕,直接上图) 想要达到的效果: 实 ...

  4. java中mysql分组查询_ES对应mysql的group by分组查询javaApi,多对多关系的分组查询...

    ES对应mysql的group by分组查询javaApi,多对多关系的分组查询 比如我这边有个下列订单索引数据,现在的需求是按用户(fmerchantId)和支付方式(fchannelId)进行分组 ...

  5. oracle两表联查分组,oracle解决多表关联分组查询问题

    做了一个功能需要分组查询,同时查询A表分组查询的ID需要关联B表的数据,本来想两个表关联查询,但是报group by 语法不正确.所以做了以下修改. select count(*), cindexid ...

  6. MySQL使用group by分组查询每组最新的一笔数据

    问题来源 今天遇到一个查询数据库数据的问题:要获取每个分组最新的一笔数据,并将每个分组最新的一笔数据重新组成一个新的列表 这种场景,当然是想到了分组查询,使用 group by,思路也很清晰: 将所有 ...

  7. mysql 如何时间分组,mysql如何按时间分组查询

    mysql按时间分组查询的方法: DATE_FORMAT(date,format):函数用于以不同的格式显示日期/时间数据. 参数: date:表中时间类型的字段名称. format:时间输出格式. ...

  8. MySQL(七)—— 分组查询

    MySQL数据库系列内容的学习目录→\rightarrow→老杜带你学MySQL学习系列内容汇总. 7. 分组查询 7.1 group by 7.2 having 7.3 select 语句总结 7. ...

  9. mysql 子表_MySQL子查询,派生表和通用表达式

    一:子查询 1.介绍 在另一个查询(外部查询)中嵌套另一个查询语句(内部查询),并使用内部查询的结果值作为外部查询条件. 2.子查询在where中 SELECT customerNumber, che ...

最新文章

  1. 如何实现对ELK各组件的监控?试试Metricbeat
  2. HttpServlet中的service方法
  3. Virtual ListView效率对比
  4. XJTLU Outstanding Student for 2017-2018!
  5. 自定义圆形控件 RoundImageView
  6. 解决IE浏览器登陆失败异常!
  7. 让我们的标签语义化成为一种习惯好处多多
  8. java jsr305_java – 为什么我需要添加神器JSR305才能使用Guava 14?
  9. pycharm 运行后,如何查看变量值以及继续输入语句并运行?(非Debug , debug太慢)
  10. win10商店下载位置_手把手教您win10应用商店安装目录在哪的详尽处理门径
  11. 关于快应用list、list-item踩的坑
  12. ZOJ 3805 树形dp
  13. c语言是学电脑吗,c语言入门至精通这些天一直有人问我,c语言好学吗?我是个新手...
  14. 【电气专业知识问答】问:电动机的电气性能有什么要求?
  15. 大数据就业前景,分析的太到位了
  16. Dsolve PDE基础
  17. 2020第五届上海第二工业大学新生程序设计竞赛(Java题解)
  18. VMware 虚拟机安装Linux(Ubuntu)系统教程
  19. 面向对象程序设计C++学习之路2
  20. 脱了裤子放屁之std::string

热门文章

  1. 蓝牙耳机降噪哪款好?300-500以内降噪蓝牙耳机推荐
  2. display android,iDisplay官网下载
  3. 中英对照 关于计算机的科技英语,《计算机专业英语》中英文对照 .pdf
  4. CISSP CBK 八大知识领域
  5. Centos7升级内核——图文详尽版
  6. 接口多态的综合案例——笔记本电脑
  7. 京东上千页面搭建基石——CMS前后端分离演进史
  8. 光伏“分化”日臻凸显 新一轮价格暗战将起
  9. 共享文件服务器扫描的,服务器上如何设置扫描共享文件夹
  10. Django数据库缓存