Это SQL QueryЧтобы вычесть предыдущее значение строки в 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 Server, прочитав это: 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. –