2016-12-15 9 views
1

期日が1〜30日を超えた場合の総注文金額を計算します。たとえば、納期が2016-12-01で、現在の日付が2016-12-15の場合、支払期限が15日を超えていることを意味します。 結果は次のようになります。SUMの合計を取得する期日が1〜30日間である場合

以下
TotalAmount 
95 

はスキーマです:

CREATE TABLE Orders(ID int NOT NULL, OrderDate date, OrderAmount Decimal, CustomerID varchar(45), OrderName varchar(45), PaymentDueDate date); 

INSERT INTO Orders(ID, OrderDate, OrderAmount, CustomerID, OrderName, PaymentDueDate) 
VALUES 
    (1,"2016-10-01", 50, 123, "T-shirt", "2016-12-01"), 
    (2,"2016-10-12", 45, 124, "Shorts", "2016-11-18"), 
    (3,"2016-10-14", 20, 125, "Socks", "2016-10-22"), 
    (4,"2016-12-11", 60, 126, "Ties", "2017-01-05"), 
    (5,"2016-12-14", 15, 127, "Nike Shoes", "2016-12-30"); 
+1

実際のテーブル構造の場合は、それを再構築することをお勧めします。 'OrderAmount'はvarcharなのでCharは可能ですのでSUM()とTotalAmountが破棄されます。 – Nebi

+1

の金額は通常10進数です。ちょうどスティーン ' – Strawberry

答えて

0

ここに私の答えです。それは問題を解決しました。

SELECT SUM(OrderAmount) AS TotalAmount FROM Orders WHERE PaymentDueDate 
BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE() 
1

この文は動作するはずです:

SELECT SUM(OrderAmount) AS TotalAmount FROM Orders WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) < PaymentDueDate

は、現在の日付マイナス30日を取得します(あなたをNOW()またはCURDATE()を使用できます。この日付が期日より前の場合は、制限内です。

+0

お試しいただきありがとうございます。あなたの答えは間違っています。必要な答えはTotalAmountとしてSUM(OrderAmount)を与え、提供されたスキーマに基づいてTotalAmountを95として表示します。 – phil

+0

私は急いでいましたが、最初は気づかなかった、私はそれを編集しました –

+0

@phil来てください...それらのことは理解できる、すべてがスプーンの摂食である必要はありません。 –

0

SELECTSUM TOTAL_AMOUNT AS(orderAmount)

からの受注

WHERE paymentDuaDate NOW BETWEEN ()AND(NOW()、INTERVAL DAY -30)DATE_ADD

0

次の文を試してみてください:

SELECT SUM(OrderAmount) AS TotalAmount FROM `orders` WHERE `OrderDate` >= CURDATE() AND `OrderDate` < CURDATE() + INTERVAL 30 DAY 

おかげで...

関連する問題