最近项目上遇到一个这样的需求,优惠券管理,优惠券里面有涉及到商户信息,要以商户名称分组,时间倒序排序。添加优惠券时间倒序排序,以最新的数据显示在最前面(这里也要是商户组的最新一条显示在最前)。
根据产品经理的要求,写的原sql是这样的,如下:
SELECT b.name as merchant_name,`a`.`update_time`,`b`.`is_qrcode`,b.status as mstatus,`a`.*
FROM `***_*****_discount` `a`
INNER JOIN `***_******_merchant` `b` ON `a`.`merchant_id`=`b`.`id`
WHERE `a`.`status` = '0' AND `a`.`id` = '142'
ORDER BY `b`.`name` DESC,`a`.`update_time` DESC;
执行完看一下效果是这样了,商户信息一起展示了,没想到的是,添加一条新的优惠券信息,你们能想到会是怎样的展示效果吗?万万没想到,它是显示在相应的商户分组的第一条的地方显示,并不是显示在最前面第一条,所以又开始研究,这个sql应该怎样写呢?经过一番修改整理修改整理之后,终于功夫不负有心人,写出来了。
大家想知道最终结果吗?
O(∩_∩)O哈哈~,噔噔噔噔 ,O(∩_∩)O哈哈~
别着急,接下来就给大家展示最终sql语句:
SELECT
b.id,b.name as merchant_name,`b`.`is_qrcode`,b.status as mstatus,`a`.*
FROM `*******表名` `a`
INNER JOIN `*****表名` `b` ON `a`.`merchant_id`=`b`.`id`
INNER JOIN
(select max(`a`.`update_time`) addtime,`a`.`merchant_id`,a.name FROM `*****表名` a group by `a`.`merchant_id`) t
on `a`.`merchant_id`= `t`.`merchant_id`
WHERE `a`.`status` = '0' AND `a`.`id` = '11'
ORDER BY t.addtime desc,t.merchant_id DESC,`a`.`update_time` DESC
上面sql语句才是正解。
上面sql才是以商户名称分组并且以最新数据显示最前面的sql语句。
![](https://i-blog.csdnimg.cn/blog_migrate/4bdb018a291d1147e995ae019488c1fd.png)
搞定完成。
如果大家有更好的实现方式,多多益善,大家不要吝啬哦,共同进步,共同学习!!