mysql - 从连接表中查询日期列

标签 mysql sql join

这是架构:

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/

相关文章:

php - mysqli::准备 SQL 错误

mysql - 如何选择没有定义的词

sql - 仅当 sql 中发生更改时才更新值

javascript - jquery easyui 不收取 .js 费用

php - 简单的 mysqli 查询不返回任何内容

mysql - 忽略符号的 SQL 查询

mysql - 将 MySQL 表的内容复制到另一个(本地)数据库中的表

php - Laravel 为 2 列连接同一个表

mysql - mysql中如何连接三张表

php - 如何使用zf2向mysql插入数据?