这是架构:
Customer (Customer_ID, Name, Address, Phone),
Porder (Customer_ID, Pizza_ID, Quantity, Order_Date),
Pizza (Pizza_ID, Name, Price).
我想根据 Order_Date 以及过去 30 天内花最多钱的人来获取过去 30 天内订购披萨的所有客户。这些可以合并为一个吗?
这是我正在尝试的,但我不确定 DATEDIFF 或查询如何计算总金额。
SELECT customer.customer_ID, customer.name FROM customer
JOIN porder ON customer.customer_ID = porder.customer_ID
GROUP BY customer.customer_ID, customer.name
WHERE DATEDIFF(porder.porder_date,getdate()) between 0 and 30
过去 30 天谁花的钱最多?
SELECT porder.customer_ID, porder.pizza_id, porder.quantity FROM order
JOIN pizza ON porder.pizza_ID = pizza.pizza_ID
GROUP BY porder.customer_ID
WHERE MAX((porder.quantity * pizza.price)) && DATEDIFF(porder.porder_date,getdate()) between 0 and 30
最佳答案
请记住,函数对于查询优化器来说是黑匣子,因此您最好使查询适合索引,而不是相反。
WHERE DATEDIFF(order.order_date,getdate()) between 0 and 30
可以重写,以便查询将使用 order_date
WHERE order.order_date >= CURRENT_DATE - INTERVAL 30 DAY
过去 30 天内谁花的钱最多
SELECT
o.customer_id, SUM(p.price * o.quantity)
FROM
order o
INNER JOIN pizza p
ON o.pizza_id = p.pizza_id
WHERE
order_date >= CURRENT_DATE - INTERVAL 30 DAY
GROUP BY o.customer_id
ORDER BY SUM(p.price * o.quantity) DESC
LIMIT 1
关于mysql - 从连接表中查询日期列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29901663/