C# 当我们按日期范围选择数据时,如何获取上次余额记录

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

例如:

如果我将日期范围“2019年5月16日”应用于“了解余额”列记录, 然后,DataGridview应显示“2019年5月15日的最后余额记录”,即使2019年5月15日可能有许多记录,但只显示最后一条记录

因此,网格的第一行显示>>期初余额“5000” 然后应用的数据显示所需的输出

我得到了以下输出,但我想在选择的应用日期范围之前显示上一个余额金额为的输出

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不用于扩展讨论;这段对话已经结束。