• SQL Server 对时间两次排序


    可能标题说的有点模糊,不知道该如何表达,下面用数据展示想要的效果:
    表数据:

    SELECT * FROM SortTest
    

    在这里插入图片描述
    需求是:将最近当前日期的未来时间放到最前面,过去的日期放到后面,效果如下:(数据倒置)
    在这里插入图片描述
    看这个需求简单想法就是用union联合查询,在这里问题就来了,union不允许order by 排序。
    在这里插入图片描述
    然后想到嵌套联合查询,依旧不可以,在子查询中, 如果不存在TOP语句则ORDER BY子句无效:
    在这里插入图片描述
    加上TOP语句top 100 percent ,查询全部,这时数据乱序了:
    在这里插入图片描述
    然后找了下原因,使用100%排序就会失效,看这篇文章:点我哦
    那就查top 99.999999 percent 就成功了,但是要考虑数据是否会有遗漏。

    select * from( SELECT top 99.999999 percent  * FROM  SortTest where CreatedTime<GETDATE()  order by CreatedTime asc ) b
    Union ALL 
    select  * from( SELECT top 99.999999 percent  * FROM  SortTest  where CreatedTime>=GETDATE() order by CreatedTime desc) a
    

    后面在想能不能不用联合查询,直接对时间字段两次排序行不行,然后就出现了下面的语句:

      select * from (
    	SELECT top 99.999999 percent *
    	  
    	FROM  SortTest	  
    	order by CreatedTime desc
      )T
      order by case when CreatedTime>GETDATE() then 1 else 0 end
    

    先对数据倒叙排序,在对未来时间进行升序。

  • 相关阅读:
    jquery保存用户名和密码到cookie里面
    avalon框架
    mybatis分页插件
    获取前台查询条件的公用方法
    mybatis分页插件
    maven出错The folder is already a source folder
    Jquery图片上传预览效果
    springMVC文件上传
    自动将String类型的XML解析成实体类
    JavaScript 引擎
  • 原文地址:https://www.cnblogs.com/wangqilong/p/12540356.html
Copyright © 2020-2023  润新知