C# 当我们按日期范围选择数据时,如何获取上次余额记录
例如: 如果我将日期范围“2019年5月16日”应用于“了解余额”列记录, 然后,DataGridview应显示“2019年5月15日的最后余额记录”,即使2019年5月15日可能有许多记录,但只显示最后一条记录 因此,网格的第一行显示>>期初余额“5000” 然后应用的数据显示所需的输出 我得到了以下输出,但我想在选择的应用日期范围之前显示上一个余额金额为的输出C# 当我们按日期范围选择数据时,如何获取上次余额记录,c#,sql,sql-server,C#,Sql,Sql Server,例如: 如果我将日期范围“2019年5月16日”应用于“了解余额”列记录, 然后,DataGridview应显示“2019年5月15日的最后余额记录”,即使2019年5月15日可能有许多记录,但只显示最后一条记录 因此,网格的第一行显示>>期初余额“5000” 然后应用的数据显示所需的输出 我得到了以下输出,但我想在选择的应用日期范围之前显示上一个余额金额为的输出 Date Desc Dr Cr Balance 16-May-19 Servic
Date Desc Dr Cr Balance
16-May-19 Service loans 5000 0 5000
17-May-19 Service expanse 3000 0 8000
18-May-19 Loan Deduction 2000 0 10000
19-May-19 Bike Loan 0 5000 5000
20-May-19 Office Expanse 0 2000 3000
21-May-19 Lunch Expanse 8000 0 11000
我期待这样的输出
Date Desc Dr Cr Balance
15-May-19 Balance >>> - - 8000
16-May-19 Service loans 5000 0 13000
17-May-19 Service expanse 3000 0 16000
18-May-19 Loan Deduction 2000 0 18000
19-May-19 Bike Loan 0 5000 13000
20-May-19 Office Expanse 0 2000 11000
21-May-19 Lunch Expanse 8000 0 19000
我想你想要这样的东西:
select t.*
from (select t.*,
sum(dr - cr) over (order by date) as balance
from t
) t
where date >= '2019-05-15';
换句话说,计算子查询中的余额。然后在外部查询中进行过滤。您使用的网格类型是什么?DataGridview?您可以为上一个余额编写一个查询,然后为该结果插入一个网格行,然后插入包含应用数据的其余网格行
DataGridView.Rows.Add(row);
这可能有助于
DECLARE @Temp TABLE
(
Id INT IDENTITY(1,1),
[Date] DATE,
[Desc] VARCHAR(100),
DR DECIMAL(18,2),
CR DECIMAL(18,2),
Balance DECIMAL(18,2)
)
INSERT INTO @Temp(Date,[Desc],DR,CR,Balance) VALUES ('15-May-19','Service loans',1000,0,1000)
INSERT INTO @Temp(Date,[Desc],DR,CR,Balance) VALUES ('15-May-19','Service loans',2000,0,3000)
INSERT INTO @Temp(Date,[Desc],DR,CR,Balance) VALUES ('16-May-19','Service loans',5000,0,8000)
INSERT INTO @Temp(Date,[Desc],DR,CR,Balance) VALUES ('17-May-19','Service loans',3000,0,11000)
INSERT INTO @Temp(Date,[Desc],DR,CR,Balance) VALUES ('18-May-19','Service loans',0,1000,10000)
DECLARE @FromDate DATE = '16-May-19'
DECLARE @ToDate DATE = '18-May-19'
;WITH Lastbalance
AS(
SELECT TOP(1) Date,'Balance >>>' [Desc],'--'DR,'--'CR,Balance
FROM @Temp
WHERE Date = dateadd(day,-1, cast(@FromDate as date))
ORDER BY Id DESC
)
SELECT * FROM Lastbalance
UNION
SELECT Date,[Desc],CAST(DR as VARCHAR(10)) DR,CAST(CR as VARCHAR(10)) CR,Balance
FROM @Temp
WHERE Date >= @FromDate AND Date <= @ToDate
您需要按日期订购并购买最后一件商品。cComments中的datagridview不用于扩展讨论;这段对话已经结束。