這是SQL查詢要減去在SQL Server上一行值2012
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) [Sno],
_Date,
SUM(Payment) Payment
FROM
DailyPaymentSummary
GROUP BY
_Date
ORDER BY
_Date
這將返回輸出這樣
Sno _Date Payment
---------------------------
1 2017-02-02 46745.80
2 2017-02-03 100101.03
3 2017-02-06 140436.17
4 2017-02-07 159251.87
5 2017-02-08 258807.51
6 2017-02-09 510986.79
7 2017-02-10 557399.09
8 2017-02-13 751405.89
9 2017-02-14 900914.45
我怎樣才能像下面
Sno _Date Payment Diff
--------------------------------------
1 02/02/2017 46745.80 46745.80
2 02/03/2017 100101.03 53355.23
3 02/06/2017 140436.17 40335.14
4 02/07/2017 159251.87 18815.70
5 02/08/2017 258807.51 99555.64
6 02/09/2017 510986.79 252179.28
7 02/10/2017 557399.09 46412.30
8 02/13/2017 751405.89 194006.80
9 02/14/2017 900914.45 149508.56
其他列
我試過以下查詢,但無法解決錯誤
WITH cte AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) [Sno],
_Date,
SUM(Payment) Payment
FROM
DailyPaymentSummary
GROUP BY
_Date
ORDER BY
_Date
)
SELECT
t.Payment,
t.Payment - COALESCE(tprev.col, 0) AS diff
FROM
DailyPaymentSummary t
LEFT OUTER JOIN
t tprev ON t.seqnum = tprev.seqnum + 1;
任何人都可以幫我嗎?
你可能想看看SQL服務器「窗口函數」,通過閱讀這篇:http://sqlmag.com/sql-server-2012/how-use-microsoft-sql-server-2012s-window-functions-part-1 – pmbAustin
要訪問「上一個」行,可以使用LAG。 https://msdn.microsoft.com/en-us/library/hh231256.aspx –
請記住,您需要比(選擇1)更好的順序。這是一個無用的順序,並不總是以相同的順序返回你的行。你應該使用合理的專欄。在你的情況像Sno或_Date。 –