关于时间排序的一段sql

fei缘如水 2016-05-25 04:23:37
这么个要求,按照一个日期排序精确到时分秒的降序,最上面的数据显示当天的,然后显示昨天包括以前的,最后显示明天以后包括明天的。= =。这要咋写
...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mo_DeNo 2016-05-25
  • 打赏
  • 举报
回复
用case when来弄个权重值,然后order by 权重值,时间,就是你要的效果了
我就是小石头 2016-05-25
  • 打赏
  • 举报
回复
以下为表信息 column_name 2016-03-30 20:08:13.077 2016-03-30 22:08:13.077 2016-03-30 01:08:13.077 2016-03-31 01:08:13.077 2016-03-31 02:08:13.077 2016-03-31 03:08:13.077 2016-05-25 01:08:13.077 2016-05-25 02:08:13.077 2016-05-25 03:08:13.077 2016-05-26 01:08:13.077 2016-05-26 02:08:13.077 2016-05-27 02:08:13.077 查询语句 /* * 排序查询 */ SELECT * FROM test_paixu AS tp WHERE CONVERT(varchar(100),tp.column_name,23)=CONVERT(varchar(100), GETDATE(), 23) UNION ALL SELECT * FROM test_paixu AS tp1 WHERE CONVERT(varchar(100),tp1.column_name,23)<CONVERT(varchar(100), GETDATE(), 23) UNION ALL SELECT * FROM test_paixu AS tp2 WHERE CONVERT(varchar(100),tp2.column_name,23)>CONVERT(varchar(100), GETDATE(), 23) 查询效果 column_name 2016-05-25 01:08:13.077 2016-05-25 02:08:13.077 2016-05-25 03:08:13.077 2016-03-30 20:08:13.077 2016-03-30 22:08:13.077 2016-03-30 01:08:13.077 2016-03-31 01:08:13.077 2016-03-31 02:08:13.077 2016-03-31 03:08:13.077 2016-05-26 01:08:13.077 2016-05-26 02:08:13.077 2016-05-27 02:08:13.077 可能不是最好的方法,例如没有加入排序。你自己完整下,大概就是这么个意思吧。 有其他解决方法的欢迎指正。
xdashewan 2016-05-25
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
思路挺开阔啊!挺好。 不过不用三次查询然后 union all操作,一次查询扫描中就能直接获得“权重值”字段并且用在 order by 中了。
是这样的,因为考虑到“当天”这个值是动态的,所以设计数据库时应该不会去设计权重这个字段,那么权重就要在三句union all里分别手工select出来
fei缘如水 2016-05-25
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
三句sql,一句抽今天的数据写死一个权重值为0,一句抽昨天之前的数据权重值为1,第三句抽今天之后数据权重为2,然后用union all把三句合并起来,最后总的order by 权重 asc,日期时分秒 desc
嗯 或许没表达怎么清楚~。。 就是按照这日期字段降序,只不过前提是分3个组当天,当天以后,当天以前。
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
三句sql,一句抽今天的数据写死一个权重值为0,一句抽昨天之前的数据权重值为1,第三句抽今天之后数据权重为2,然后用union all把三句合并起来,最后总的order by 权重 asc,日期时分秒 desc
思路挺开阔啊!挺好。 不过不用三次查询然后 union all操作,一次查询扫描中就能直接获得“权重值”字段并且用在 order by 中了。
  • 打赏
  • 举报
回复
引用 楼主 u014617792 的回复:
按照一个日期排序精确到时分秒的降序,最上面的数据显示当天的,然后显示昨天包括以前的,最后显示明天以后包括明天的。
你这一句话前后自相矛盾。自己先想想看是按照什么值的“降序”?
xdashewan 2016-05-25
  • 打赏
  • 举报
回复
三句sql,一句抽今天的数据写死一个权重值为0,一句抽昨天之前的数据权重值为1,第三句抽今天之后数据权重为2,然后用union all把三句合并起来,最后总的order by 权重 asc,日期时分秒 desc
fei缘如水 2016-05-25
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
看不懂,举例说话
比如今天是5月25号那我数据显示就是下面这格式 5月25号 5月25号 5月25号 属于当天的数据显示在最上面 5月24号 5月23号 5月22号 这是昨天以前的包括昨天的数据显示在当天后面 5月26号 5月27号 5月28号 这是当天以后的数据显示在最下面 这样的格式~
xdashewan 2016-05-25
  • 打赏
  • 举报
回复
看不懂,举例说话

62,046

社区成员

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

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

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

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