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

先對數據倒敘排序,在對未來時間進行升序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM