关于排序的两个问题

-一个大坑 360 IT  2017-11-02 04:43:49
如何按今天,然后时间排序。直接按日期+时间,会从10月份的开始排
...全文
393 12 点赞 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
-一个大坑 2017-11-03
引用 7 楼 qq646748739 的回复:
假设: 表名为: tb 日期字段为: dtime date 单号字段为: orderno

--排序1: 如何按今天,然后时间排序。
select orderno,dtime
  from(select orderno,dtime,case when dtime=trunc(sysdate) then 0 else 1 end flag
         from tb
       )
  order by flag,dtime;
  
--排序2: 如我按时间+单号就是A002,A001,A003,A001
select orderno,dtime from tb order by dtime,orderno;

--排序3: 如果按单号+时间就是A001,A001,A002,A003
select orderno,dtime from tb order by orderno,dtime;
排序2.3我会。我想要的是图片上的那种效果A002,A001,A001,A003
  • 打赏
  • 举报
回复
-一个大坑 2017-11-03
引用 6 楼 yuxiangaaaaa 的回复:
[quote=引用 3 楼 happy4944 的回复:] [quote=引用 1 楼 yuxiangaaaaa 的回复:] 没明白什么意思,日期+时间,按时间降序排序就可以了
排序时怎么把日期是今天的放在前面显示[/quote] 按日期降序,今天的日期肯定是最大的,排在最前面呀。[/quote] 有之前的数据,还有未处理的数据。4+7楼已经说了
  • 打赏
  • 举报
回复
-一个大坑 2017-11-03
引用 4 楼 wmxcn2000 的回复:
方法1、 order by case when 日期 = 今天 then 0 else 1 end,其他列 方法2、 where 日期 = 今天 union all where 日期 <> 今天
排序还可以用case,学到了
  • 打赏
  • 举报
回复
碧水幽幽泉 2017-11-03
假设:
表名为: tb
日期字段为: dtime date
单号字段为: orderno


--排序1: 如何按今天,然后时间排序。
select orderno,dtime
from(select orderno,dtime,case when dtime=trunc(sysdate) then 0 else 1 end flag
from tb
)
order by flag,dtime;

--排序2: 如我按时间+单号就是A002,A001,A003,A001
select orderno,dtime from tb order by dtime,orderno;

--排序3: 如果按单号+时间就是A001,A001,A002,A003
select orderno,dtime from tb order by orderno,dtime;

  • 打赏
  • 举报
回复
自由自在_Yu 2017-11-03
引用 3 楼 happy4944 的回复:
[quote=引用 1 楼 yuxiangaaaaa 的回复:] 没明白什么意思,日期+时间,按时间降序排序就可以了
排序时怎么把日期是今天的放在前面显示[/quote] 按日期降序,今天的日期肯定是最大的,排在最前面呀。
  • 打赏
  • 举报
回复
吉普赛的歌 2017-11-03
你把你的整个表结构贴出来, 另外, 哪个字段代表了“日期”?
  • 打赏
  • 举报
回复
卖水果的net 2017-11-03
方法1、 order by case when 日期 = 今天 then 0 else 1 end,其他列 方法2、 where 日期 = 今天 union all where 日期 <> 今天
  • 打赏
  • 举报
回复
碧水幽幽泉 2017-11-03
如果说还能实现的话,只有这种可能了:

with tmp as
(
select 'A001' orderid, '17:00' dt from dual union all
select 'A002' orderid, '07:00' dt from dual union all
select 'A001' orderid, '08:00' dt from dual union all
select 'A003' orderid, '09:00' dt from dual
)
select *
from tmp
order by dbms_random.value;

多执行几次,总会出现:A002,A001,A001,A003 这种排序。
我执行3次就出现了。
  • 打赏
  • 举报
回复
碧水幽幽泉 2017-11-03
引用 10 楼 happy4944 的回复:
[quote=引用 7 楼 qq646748739 的回复:]
假设:
表名为: tb
日期字段为: dtime date
单号字段为: orderno


--排序1: 如何按今天,然后时间排序。
select orderno,dtime
from(select orderno,dtime,case when dtime=trunc(sysdate) then 0 else 1 end flag
from tb
)
order by flag,dtime;

--排序2: 如我按时间+单号就是A002,A001,A003,A001
select orderno,dtime from tb order by dtime,orderno;

--排序3: 如果按单号+时间就是A001,A001,A002,A003
select orderno,dtime from tb order by orderno,dtime;

排序2.3我会。我想要的是图片上的那种效果A002,A001,A001,A003[/quote]
这种需求实现不了。
因为存在如下自相矛盾的逻辑。
为什么A003 09:00 要放在 A001 17:00后面?而又同时要求A002 07:00 放在A001 08:00 前面?
  • 打赏
  • 举报
回复
-一个大坑 2017-11-02
引用 1 楼 yuxiangaaaaa 的回复:
没明白什么意思,日期+时间,按时间降序排序就可以了
排序时怎么把日期是今天的放在前面显示
  • 打赏
  • 举报
回复
-一个大坑 2017-11-02
另一个和上面的有点类似,见下图。按时间排,如果单号一样放在一起。
如我按时间+单号就是A002,A001,A003,A001
如果按单号+时间就是A001,A001,A002,A003
  • 打赏
  • 举报
回复
自由自在_Yu 2017-11-02
没明白什么意思,日期+时间,按时间降序排序就可以了
  • 打赏
  • 举报
回复
相关推荐
发帖
基础和管理
加入

1.7w+

社区成员

Oracle 基础和管理
申请成为版主
帖子事件
创建了帖子
2017-11-02 04:43
社区公告
暂无公告