2016-12-15 109 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 

谢谢...