这个排序SQL怎么写呢?

chouto 2009-06-30 12:02:47
需求:
一个发布单列表有如下几列:
单号(ID)、方便交易时间(形如:10:00-23:00)(TradeTime)、发布时间(CreatedDate)、单价(UnitPrice)

发布单默认是按时间排序,在此基础上再根据发布单的方便交易时间进行排序,要求当前时间不在此方便交易时间之内的排到最后面



这样的排序怎么写?
谢谢
...全文
77 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
desegou 2009-06-30
  • 打赏
  • 举报
回复
先拆方便交易时间,查出在交易时间内的记录,在用union查出不在交易时间内的记录,并加个虚拟列,前面的为1,后面的为2好了,这是为了加order by用的
cpio 2009-06-30
  • 打赏
  • 举报
回复
减的时候不能只用当前时间减起始时间,我只是说通过求时间差的方式
cpio 2009-06-30
  • 打赏
  • 举报
回复
通过SQL函数也能把起始时间,再转成时间格式,再取差值,只是那样效率会低点而已

stromboy007 2009-06-30
  • 打赏
  • 举报
回复
那就只能拆分方便交易时间进行比较咯 不过“要求当前时间不在此方便交易时间之内的排到最后面 ”这个有点麻烦
chouto 2009-06-30
  • 打赏
  • 举报
回复
表结构是以前做这个系统的人设计的,如果在不改表结构的情况下如何处理呢? 谢谢
cpio 2009-06-30
  • 打赏
  • 举报
回复
表结构没设计好,方便交易时间应该设置为起始时间和结束时间,不应该放在一个字段

这样的话,以当前时间减去起始时间排序就可以了
jiangshun 2009-06-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 chouto 的回复:]
jiangshun 你好!感谢你的回复。

刚刚试了你的方法,设置了一个方便交易时间为20:00-05:00 ,结果这条记录也查出来了。

还有个条件是先根据发布时间排序,在此基础上再根据方便交易时间排序。
[/Quote]

convert(varchar(30),CREATEDDATE,120)+'0' ELSE convert(varchar(30),CREATEDDATE,120)+'1'
已经加了时间了啊,是按时间排的,然后根据是否在交易时间内拍啊

还是不明白你的意思
chouto 2009-06-30
  • 打赏
  • 举报
回复
jiangshun 你好!感谢你的回复。

刚刚试了你的方法,设置了一个方便交易时间为20:00-05:00 ,结果这条记录也查出来了。

还有个条件是先根据发布时间排序,在此基础上再根据方便交易时间排序。
jiangshun 2009-06-30
  • 打赏
  • 举报
回复
select * from tab order by CASE WHEN DATEPART(HH,[CREATEDDATE])BETWEEN DATEPART(HH,CAST(LEFT([TRADETIME],5)AS DATETIME ))
AND DATEPART(HH,CAST(RIGHT([TRADETIME],5)AS DATETIME ))
THEN convert(varchar(30),CREATEDDATE,120)+'0' ELSE convert(varchar(30),CREATEDDATE,120)+'1' END

---不知道是不是你想要的结果

/*
ID TRADETIME CREATEDDATE
------------------- ----------- ------------------------------------------------------
QGC0906292828222400 00:00-00:00 2009-06-29 18:07:54.440
QGC0906302505500808 00:00-00:00 2009-06-30 09:16:28.127
QGC0906303403865260 00:00-00:00 2009-06-30 09:17:57.963
QGC0906302883502262 23:00-05:00 2009-06-30 09:24:15.410
QGC0906300475566216 00:00-00:00 2009-06-30 09:27:24.113
QGC0906302079159966 20:00-04:00 2009-06-30 09:30:04.473
QGC0906303739973920 09:00-18:00 2009-06-30 09:40:00.067
QGC0906303902317670 00:00-00:00 2009-06-30 09:40:16.283
QGC0906304051380170 02:00-16:00 2009-06-30 09:40:31.190

(所影响的行数为 9 行)

*/
chouto 2009-06-30
  • 打赏
  • 举报
回复
大家注意下,方便交易时间是可以跨天的
Pig23 2009-06-30
  • 打赏
  • 举报
回复
不能改表结构的话,可以先转换成字符串,拆分成10, 23 这样的(还好是24小时制),再转换成数字……
wang66111988 2009-06-30
  • 打赏
  • 举报
回复
这个行吗?order by now-TradeTime dsc,TradeTime,CreatedDate,UnitPrice

同意desegou
2009-06-30 12:56:57先拆方便交易时间,查出在交易时间内的记录,在用union查出不在交易时间内的记录,并加个虚拟列,前面的为1,后面的为2好了,这是为了加order by用的

chouto 2009-06-30
  • 打赏
  • 举报
回复
测试数据(已经根据CreatedDate排序了)

ID TRADETIME CREATEDDATE
-----------------------------------------------------------------
QGC0906304051380170 02:00-16:00 2009-06-30 09:40:31.190
QGC0906303902317670 00:00-00:00 2009-06-30 09:40:16.283
QGC0906303739973920 09:00-18:00 2009-06-30 09:40:00.067
QGC0906302079159966 20:00-04:00 2009-06-30 09:30:04.473
QGC0906300475566216 00:00-00:00 2009-06-30 09:27:24.113
QGC0906302883502262 23:00-05:00 2009-06-30 09:24:15.410
QGC0906303403865260 00:00-00:00 2009-06-30 09:17:57.963
QGC0906302505500808 00:00-00:00 2009-06-30 09:16:28.127
QGC0906292828222400 00:00-00:00 2009-06-29 18:07:54.440
jiangshun 2009-06-30
  • 打赏
  • 举报
回复
给一些测试数据和测试结果,看文字太吃力了

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧