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 句を使用して、目的の順序でデータにアクセスすると、必要なものを取得できると思います。インデックスの使用については、DB のドキュメントも参照してください。

于 2013-05-15T12:39:31.453 に答える
0

これを行う方法に関する1つの提案は次のとおりです。 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 に答える