跳到主要內容

[SQL] SQL依照你的排序條件 找出目前資料的前一筆與下一筆。 Find Pre and Next DataRows of current Datarow by your order condition

有時候需要用SQL找出前一筆跟後一筆資料
用SQL的TOP是沒有辦法做到
這個時候就可以這個語法

select * from (
  SELECT TOP 1 * 
  FROM [Article] 
  where Poid<{CurrentPoid}
  order by CreateDate  desc) t
union
select * from (
  SELECT TOP 1 * 
  FROM [[Article] 
  where Poid>{CurrentPoid}
  order by CreateDate ASC) t2

找出目前PK id前一個與後一個的資料(依照想要排序順序)

那如果指示想要一個資料行呈現的話
可以改用下面的SQL語法 讓這兩筆資料join在同一筆

  select Pre.*,Nex.* from 
  (SELECT TOP 1 * ,1 tID
  FROM [dbo].[Article] 
  where Poid<{CurrentPoid}
  order by CreateDate  desc) 
 Pre left join 
  (SELECT TOP 1 * ,1 tID
  FROM [dbo].[Article] 
  where Poid>{CurrentPoid}
  order by CreateDate ASC) Nex on Pre.tID=Nex.tID

留言

這個網誌中的熱門文章

[WEB]連線 HTTPS 網站發生驗證失敗導致基礎連接已關閉

某支透過 WebClient 物件去呼叫第三方API的程式,突然有天無法使用 經過測試出現下列的錯誤 基礎連接已關閉: 傳送時發生未預期的錯誤。 InnerException : 驗證失敗,因為遠端群體已經關閉傳輸資料流。 原來是第三方的服務已經不支援 TLS 1.0 我方的程式是用.net Framework 4.0開發了 得強制讓webclient改用 TLS 1.1 或 TLS 1.2 感謝黑大提供解決方法 在程式中加入 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12  的設定就解決了這個問題 WebClient wc = new WebClient(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; 參考資料:暗黑執行緒

[SQL server] SQL server 啟用 xp_cmdshell (Enable xp_cmdshell by Facet)

xp_cmdshell 是讓SQL server 在SQL語法中 可以執行類似於windows cmd程序的功能 執行的任何輸出結果都會當作文字資料來回傳 不過通常 xp_cmdshell因為安全性的關係 是沒有被啟用的 如果需要啟用 可以用以下的方式啟用  1. 在SQL Server Management Studio 中選擇 要啟用的Server 按右鍵執行[Facet] 2.在右側選擇[介面區組態] 會出現相關的屬性 3.在XPCmdShellEnabled 設定為True即可 至於 xp_cmdShell 用法如下 EXEC xp_cmdshell 'dir *.exe';