今天我遇到了需要選擇實體的初始(具有最早日期)和最終(具有最後日期)值的任務。我已經設法通過多個OVER來做到這一點,但看起來這將是prod數據的性能問題。在SQL Server中爲第一個和最後一個日期選擇值
有沒有什麼辦法可以優化我的解決方案?
SELECT DISTINCT
InvoiceID,
FIRST_VALUE(ih.ApprovedTotal) OVER (PARTITION BY InvoiceID ORDER BY ih.DateReviewed ASC) AS InitialTotal,
FIRST_VALUE(ih.DateReviewed) OVER (PARTITION BY InvoiceID ORDER BY ih.DateReviewed ASC) AS Initialdate,
LAST_VALUE(ih.ApprovedTotal) OVER (PARTITION BY InvoiceID ORDER BY ih.DateReviewed ASC) AS FinalTotal,
LAST_VALUE(ih.DateReviewed) OVER (PARTITION BY InvoiceID ORDER BY ih.DateReviewed ASC) AS FinalDate
FROM
tblInvoiceHistory ih
編輯:如果我們有這樣的數據:
InvoiceId | DateReviewed | ApprovedTotal
--------------------------------------------
1 1 | 2015-1-1 | 10
2 1 | 2015-2-1 | 20
3 1 | 2015-3-1 | 30
4 2 | 2015-1-1 | 110
5 2 | 2015-2-1 | 120
6 2 | 2015-3-1 | 130
所需的輸出會是這樣
InvoiceId | InitialDate | InitialTotal | FinalDate | FinalTotal
-----------------------------------------------------------------------
1 1 | 2015-1-1 | 10 | 2015-3-1 | 30
2 2 | 2015-1-1 | 110 | 2015-3-1 | 130
你想要的合計第一個和最後一個日期,或每個InvoiceID的第一個和最後一個日期? – jarlh
@jarlh each InvoiceID's – Xandrmoro
然後lad2025的答案就是你想要的。 – jarlh