2016-12-15 92 views
1

計算訂單總金額逾期1-30天之間的到期日。例如,如果到期日爲2016-12-01,當前日期爲2016-12-15,則表示該付款逾期15天。 結果應該是這樣的:獲得訂單金額合計訂單金額在過期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

金額通常爲十進制。只是說' – 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

謝謝你的嘗試。你的回答不正確。期望的答案應該SUM(OrderAmount)作爲TotalAmount並且顯示TotalAmount爲95基於提供的模式。 – phil

+0

我很着急,一開始並沒有注意到,我編輯它 –

+0

@phil來吧......這些東西可以理解,一切都不需要勺子餵養。 –

0

SELECTSUM(orderAmount)AS TOTAL_AMOUNT

FROM訂單

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

0

試試看:

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

謝謝...