关于语句排序的问题!orderbydesc

这一张表格有两部分拼在一起,上部分是报修单有bxrq是报修日期,tbsj是填报时间(填的时间和报修的时间可以不相同)

下部分有意见单,有jyrq是建议日期

image.png

!!问题是

order by  

UNIX_TIMESTAMP(case when bxrq is null then jyrq else tbsj end) desc

这是我写的的语句,需要就是按照时间戳倒序排序,当报修日期bxrq为空时按建议日期jyrq排序,否则还是按填报时间tbsj排倒序

!!但是实际预览的时候发现,如果新建一个报修单有bxrq是报修日期的时候,没有意见单建议日期jyrq为空时,应该出现的第一个是新填写的报修单

可是实际出来的是意见单的建议日期jyrq倒序排列

然后接下来才是我最新写的那条有报修日期bxrq的报修单

需要怎么修改

!!整个语句是bxr事报修人,yjjyr意见建议人,bxrq报修日期,建议日期jyrq,tbsj填报时间

select * from (

(SELECT * FROM bb_hqb_db_tb d LEFT JOIN bb_hqb_yjjyb_tb y 

ON d.bxr=y.yjjyr and d.bxrq = y.jyrq )

union 

(SELECT * FROM bb_hqb_db_tb d right JOIN bb_hqb_yjjyb_tb y 

ON d.bxr=y.yjjyr and d.bxrq = y.jyrq where d.bxr is null )) a

order by  

UNIX_TIMESTAMP(case when bxrq is null then jyrq else tbsj end) desc

FineReport SQL 帆软用户PuLI1nixsF 发布于 2022-8-4 09:52 (编辑于 2022-8-4 09:53)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
snrtuemcLv8专家互助
发布于2022-8-4 10:01

改成下面的试试

select * from (

(SELECT *,case when bxrq is null then jyrq else tbsj end as rq FROM bb_hqb_db_tb d LEFT JOIN bb_hqb_yjjyb_tb y 

ON d.bxr=y.yjjyr and d.bxrq = y.jyrq )

union 

(SELECT *,case when bxrq is null then jyrq else tbsj end as rq FROM bb_hqb_db_tb d right JOIN bb_hqb_yjjyb_tb y 

ON d.bxr=y.yjjyr and d.bxrq = y.jyrq where d.bxr is null )) a

order by  

UNIX_TIMESTAMP(rq) desc

最佳回答
0
机智的ywjLv5初级互助
发布于2022-8-4 10:02(编辑于 2022-8-4 10:02)

mysql的话,可以再嵌套if判断一层,

ORDER BY IF(ISNULL(UNIX_TIMESTAMP(case when bxrq is null then jyrq else tbsj end) ),0,1) desc

oracle可以在后面加nulls last,把空值放最后

order by UNIX_TIMESTAMP(case when bxrq is null then jyrq else tbsj end) desc nulls last

  • 3关注人数
  • 329浏览人数
  • 最后回答于:2022-8-4 10:02
    请选择关闭问题的原因
    确定 取消
    返回顶部