我的问题。我需要运行每日报告,以查找已支付10,000美元或更多的帐户在365期间从报告运行的日期起。我需要一个查询,它可以获取付款信息,并为每个帐户运行合计,如果任何帐户在365窗口内进行了总计10,000美元或更多的付款,查询将返回达到阈值的日期或帐号,我可以使用任何一个。
到目前为止,这是我的查询的适用部分,但它不能正常工作。我基于我的另一个查询,通过从当前余额中减去付款来实现类似的目的。我认为我可以修改它来工作,但一直没有成功。需要注意的是,我还没有应用365过滤器。在增加复杂性之前,我会先确保查询的基本部分有效。我使用的是SQL Server 2014。
CREATE TABLE #PaymentDate
(number int,
paymentdate date,
balance money)
;
WITH Balances1 AS
(
SELECT *,
SUM(TotalPaid) OVER (PARTITION BY number, DatePaid ORDER BY
DatePaid, number) AS Balance
FROM #Accounts
)
, Balances2 AS
(
SELECT *, ISNULL(LAG(Balance) OVER (PARTITION BY number, DatePaid ORDER
BY DatePaid, number), 0) AS Prev
FROM Balances1
)
INSERT INTO #PaymentDate
SELECT number, DatePaid, balance
FROM Balances2
WHERE Balance >= 10000 AND Prev < 10000
;
无法正确添加或忽略符合条件的一次性付款的帐户。
一些样本数据。查询应该返回前3个帐户,因为它们的支付总额都在365天窗口内(今天的日期是8/27/18)。不应包含第4个账户,因为支付总额超过10000需要超过365天:
Number DatePaid TotalPaid
123456 2017-12-01 12184.46
654321 2018-02-28 10000
231645 2017-05-31 3390
231645 2017-06-29 1565.29
231645 2017-07-26 1565.29
231645 2017-08-28 1565.29
231645 2017-09-28 1565.29
231645 2017-10-27 1565.29
231645 2017-12-01 6783.55
312546 2016-08-01 550
312546 2016-09-06 500
312546 2016-10-04 500
312546 2016-11-07 500
312546 2016-12-06 500
312546 2017-01-04 500
312546 2017-02-08 500
312546 2017-03-07 500
312546 2017-04-10 500
312546 2017-05-09 500
312546 2017-06-07 500
312546 2017-07-05 500
312546 2017-08-07 500
312546 2017-09-05 500
312546 2017-10-11 500
312546 2017-11-09 500
312546 2017-12-11 250
312546 2018-01-16 250
312546 2018-02-20 250
312546 2018-03-20 250
312546 2018-04-23 500
312546 2018-04-23 50
312546 2018-05-29 500
312546 2018-07-03 500
312546 2018-07-31 204
任何对我在哪里走错了弯的洞察都是非常感谢的。
https://stackoverflow.com/questions/52046256
复制相似问题