🚀 注重版权,转载请注明原作者和原文链接
- 小袁博客:https://boke.open-yuan.com/
- 小袁博客后台:https://boke.open-yuan.com/back-manager/
- 更多项目内容关注小红书🔍OpenYuan开袁 http://xhslink.com/I9zNaC
- 有需求可以在小袁博客首页加我微信或者QQ
场景
根据日期进行正序或者倒序,这样的场景进行在SQL中用到
今天接到一个需求,说要给原来排序的基础上,增加一个当天的信息优先在前面展示
我:???这是嘛呀?怎么实现?
左思右想,一时间没想出解决方案,首先想到的是在Java层面进行处理,但是又因为涉及到多个表的关联以及分页,还是要在SQL中处理比较好
于是使出了我的杀手锏:上百度!🔍SQL根据日期排序,当天的数据优先显示
,不搜不知道一搜吓一跳,都没一个能解决的
还是得靠自己解决,又陷入了沉思
突然灵机一动,想到一个词:“权重”,对啊,给当天的数据都加上一个权重值,权重值排序优先级最高,这样不就解决了!
说干就干,开始改SQL
修改前
字段说明
- shift_date:年-月-日 格式的日期
- start_time:时:分:秒 格式的时间
- end_time:时:分:秒 格式的时间
正常SQL
select
......,
rs.shift_date,
date_format( rs.start_time, '%H:%i' ),
date_format( rs.end_time, '%H:%i' )
from
rdt_rs rr
INNER JOIN rs_shift rs ON rr.shift_code = rs.shift_code
order by
rs.shift_date desc,
rs.end_time desc
limit 20
实现
要实现当天的优先排序在前面,思路如下:
- 设置权重,给shift_date符合当天日期的行数据权重设置为1,不满足的设置为0。
- 重新排序,排序优先级:权重 > shift_date > end_time
修改后的SQL
select
*
from (
select
......,
rs.shift_date,
date_format( rs.start_time, '%H:%i' ),
date_format( rs.end_time, '%H:%i' ),
-- 设置权重
IF( date_format( rs.shift_date, '%Y%m%d' ) = date_format( curdate(), '%Y%m%d' ), 1, 0 )
AS order_w
from
rdt_rs rr
INNER JOIN rs_shift rs ON rr.shift_code = rs.shift_code
) rs_sel
order by
-- 增加权重的排序
rs_sel.order_w desc,
rs_sel.shift_date desc,
rs_sel.end_time desc
limit 20
🚀 注重版权,转载请注明原作者和原文链接
- 小袁博客:https://boke.open-yuan.com/
- 小袁博客后台:https://boke.open-yuan.com/back-manager/
- 更多项目内容关注小红书🔍OpenYuan开袁 http://xhslink.com/I9zNaC
- 有需求可以在小袁博客首页加我微信或者QQ