2015-09-01 35 views
0

今天我遇到了需要選擇實體的初始(具有最早日期)和最終(具有最後日期)值的任務。我已經設法通過多個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 
+0

你想要的合計第一個和最後一個日期,或每個InvoiceID的第一個和最後一個日期? – jarlh

+0

@jarlh each InvoiceID's – Xandrmoro

+0

然後lad2025的答案就是你想要的。 – jarlh

回答

3
SELECT 
    InvoiceID 
    ,[Initialdate] = MIN(ih.DateReviewed) 
    ,[Finaldate] = MAX(ih.DateReviewed) 
FROM tblInvoiceHistory ih 
GROUP BY InvoiceID 

編輯:

WITH cte AS(
    SELECT 
    [InvoiceId] = InvoiceID 
    ,[MinDate]  = MIN(ih.DateReviewed) 
    ,[MaxDate]  = MAX(ih.DateReviewed) 
    FROM tblInvoiceHistory ih 
    GROUP BY InvoiceID 
) 
    SELECT 
    c.InvoiceId 
    ,[InitialDate] = c.[MinDate] 
    ,[FinalDate] = c.[MaxDate] 
    ,[InitialTotal] = (SELECT ApprovedTotal FROM tblInvoiceHistory ih WHERE ih.InvoiceId = c.InvoiceId AND ih.DateReviewed = c.[MinDate]) 
    ,[FinalTotal] = (SELECT ApprovedTotal FROM tblInvoiceHistory ih WHERE ih.InvoiceId = c.InvoiceId AND ih.DateReviewed = c.[MaxDate]) 
    FROM cte c 
+0

問題是我不僅需要日期,而且還需要從該日期的行 – Xandrmoro

+0

@Xandrmoro查看已更新的值。你在這個表上是否有類似row_number的鍵或只有InvoiceID和日期? – lad2025

+0

此表中沒有唯一列。其仍然不完全是我需要的(也許是不好的描述)。我需要爲具有最小和最大日期的行選擇ApprovalTotal列值。 – Xandrmoro

相關問題