0

假设我有一个客户余额明细表。例如 :

CustID    CustName  CustDate    Amt   Bal
1          DP       1/5/2013   1000  1000
1          DP       5/5/2013   100   1100
1          Dhara    10/5/2013  1000  1000
1          DP       10/5/2013  1000  2100

现在用户插入一条记录 CustName = DP , CustDate = 7/5/2013 , Amt = 400 那么该记录应在 2013 年 5 月 5 日之后和 2013 年 10 月 5 日之前添加,相应的余额也应更改如下:

CustID    CustName  CustDate    Amt   Bal
1          DP       1/5/2013   1000  1000
1          DP       5/5/2013   100   1100
1          DP       7/5/2013   400   1500
1          Dhara    10/5/2013  1000  1000
1          DP       10/5/2013  1000  2500

在数据库中插入记录时如何实现?我如何检查日期何时位于已插入的记录之间?请帮忙

4

2 回答 2

0

我认为,如果您使用 ORDER BY 子句以所需的顺序访问数据,您可以获得所需的内容。另请参阅您的数据库文档以了解索引的使用。

于 2013-05-15T12:39:31.453 回答
0

这是关于如何做到这一点的一个建议:http ://www.sqlfiddle.com/#!3/d341b/9

CREATE TABLE Customer
(
  CustId INT,
  CustName NVARCHAR(150),
  CustDate DATE,
  Amt INT,
)

INSERT INTO Customer
    (CustID, CustName, CustDate, Amt)
VALUES
    (1, 'DP', '2013-01-05 00:00:00', 1000),
    (1, 'DP', '2013-05-05 00:00:00', 100),
    (1, 'DP', '2013-07-05 00:00:00', 400),
    (1, 'Dhara', '2013-10-05 00:00:00', 1000),
    (1, 'DP', '2013-10-05 00:00:00', 1000)
;

;WITH RankedCustomer AS
(
  SELECT
    CustId
    , CustName
    , CustDate
    , Amt
    , ROW_NUMBER() OVER(ORDER BY CustDate) Row
  FROM
    Customer
)
SELECT
  Customer.CustId
  , Customer.CustName
  , Customer.CustDate
  , Customer.Amt
  , SUM(PreviousCustomer.Amt)
FROM
  RankedCustomer Customer
  LEFT JOIN RankedCustomer PreviousCustomer
    ON PreviousCustomer.CustId = Customer.CustId
    AND PreviousCustomer.CustName = Customer.CustName
    AND PreviousCustomer.Row <= Customer.Row
GROUP BY
  Customer.CustId
  , Customer.CustName
  , Customer.CustDate
  , Customer.Amt
ORDER BY
  Customer.CustDate
于 2013-05-16T13:18:27.507 回答