簡體   English   中英

一百萬行表中的SQL Server上一個和下一個日期

[英]SQL Server previous and next date from a million row table

我正在嘗試編寫一種有效的查詢,以從SQL Server 2008中的一百萬行表中選擇上一個日期和下一個日期。以下是我的查詢。 我在batchdetailid上創建了一個非聚集索引,並在tranId,EquipmentID和Date上包含了include字段。 由於需要花費數小時,因此我尚未完成查詢。 任何幫助將非常感激。 同樣在下面是輸出。

Previous Date              Date                   Next Date
--------------------------------------------------------------------------------
1/12/2015 06:09:34|1/12    1/12/2015 07:10:59      1/13/2015 03:30:04


 WITH CTE AS (
    SELECT
    rownum = ROW_NUMBER() OVER (ORDER BY TransactionID),
    p.TransactionID,
    p.DateTime,
    EquipmentID
    FROM table p
    where BatchDetailID = 11225 
    )
SELECT
CTE.EquipmentID,
CTE.TransactionID,
CTE.DateTime,
nex.TransactionID NextValue,
nex.DateTime NextDateTime,
prev.TransactionID PreviousValue,
prev.EventDateTime PreviousDate
FROM CTE
LEFT JOIN CTE prev ON prev.rownum = CTE.rownum - 1
LEFT JOIN CTE nex ON nex.rownum = CTE.rownum + 1

使用CTE時,Sqlserver通常會弄亂連接。 這可能執行得更快:

SELECT 
  rownum = ROW_NUMBER() OVER (ORDER BY TransactionID), 
  p.TransactionID, p.DateTime, EquipmentID 
INTO #t
FROM yourtable p 
WHERE BatchDetailID = 11225

SELECT
  t.EquipmentID,
  t.TransactionID,
  t.DateTime,
  nex.TransactionID NextValue,
  nex.DateTime NextDateTime,
  prev.TransactionID PreviousValue,
  prev.EventDateTime PreviousDate
FROM #t t
LEFT JOIN #t prev ON prev.rownum = t.rownum - 1
LEFT JOIN #t nex ON nex.rownum = t.rownum + 1

DROP table #t

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM