MySQL多表查询之GroupBy
来源:互联网 发布:excel用按钮录入数据 编辑:程序博客网 时间:2024/06/03 19:36
需求:根据主键id查询到该顾客最近的一次消费记录
SQL代码如下:
SELECTcbi.id,cbi.mob,cbi.identity_card,bcil.remark,bcil.orders_no,bcil.brand_no,bcil.with_date,bcil.scoreFROMcustomer_base_info cbiLEFT JOIN(SELECTA.customer_id,A.with_date,A.remark,A.orders_no,A.brand_no,A.scoreFROMbrand_customer_integral_log A,(SELECTcustomer_id,MAX(with_date)max_with_dateFROMbrand_customer_integral_logGROUP BYcustomer_id)BWHEREA.customer_id = B.customer_idAND A.with_date = B.max_with_date) bcil ON (bcil.customer_id = cbi.id)WHEREcbi.id = '2c914df34997e204014997e2fe4e0001'
用到的两张表:customer_base_info表为顾客基本信息,brand_customer_integral_log顾客消费记录表。
一个顾客对应多个消费记录, 即一对N的。所以用customer_base_info去左连接。我第一反映也是和很多人一样直接左连接brand_customer_integral_log然后取ORDER BY(消费时间),最后根据customer_id来GROUP BY。 但结果是不对的。
这是因为MySQL:
写的顺序:select ... from... where.... group by... having... order by..
执行顺序:from... where...group by... having.... select ... order by...
在ORDER By之前结果就已经SELECT出来了, 所以这样的思路得到的结果是错误的。
选用子查询来解决这个问题:
SELECTA.customer_id,A.with_date,A.remark,A.orders_no,A.brand_no,A.scoreFROMbrand_customer_integral_log A,(SELECTcustomer_id,MAX(with_date)max_with_dateFROMbrand_customer_integral_logGROUP BYcustomer_id)BWHEREA.customer_id = B.customer_idAND A.with_date = B.max_with_date
把brand_customer_integral_log内连接, 根据customer_id查询出MAX(with_date)最近消费时间, 这样得到的才是所要的该顾客最近消费记录。
结果如下:
2 0
- MySQL多表查询之GroupBy
- mysql groupby 优化
- Mysql GroupBy 使用注意事项
- oracle查询常用的知识点之日期,重复字段,groupby,查询大量数据时优化
- mysql之简单的多表查询
- mysql之关联查询(多表查询)
- SQL语句之GroupBy
- SQl语句之GroupBy
- Linq之GroupBy用法
- pandas--系列之groupby
- contentProvider中实现GroupBy查询
- MySQL查询优化器--非SPJ优化(一)--GROUPBY优化
- MySQL学习之MySQL单表查询
- LINQ查询操作符之Select、Where、OrderBy、OrderByDescending、GroupBy、Join、GroupJoin及其对应的查询语法
- scala实战之SparkSQL应用实例(单表count和groupby多来源表join等)
- 【MySQL】MySQL多表查询
- MySQL 多表查询
- mysql多表查询
- java 守护线程
- 2014年广州区域赛总结Accelerator
- 思维导图
- 格式化format()输出字符串
- 第十三周项目5---统计大小字母的个数
- MySQL多表查询之GroupBy
- android service bindService onServiceConnected没有调用
- Java网络编程之TCP、UDP
- 快速排序算法
- Relief算法应用
- V4L2驱动程序架构
- 树及二叉树实验第一题
- C语言-求两个整数中的较大者
- wholesale nfl jerseys supply