Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从联接表中查询日期列_Mysql_Sql_Join - Fatal编程技术网

Mysql 从联接表中查询日期列

Mysql 从联接表中查询日期列,mysql,sql,join,Mysql,Sql,Join,以下是模式: Customer (Customer_ID, Name, Address, Phone), Porder (Customer_ID, Pizza_ID, Quantity, Order_Date), Pizza (Pizza_ID, Name, Price). 我想让所有在过去30天内订购比萨饼的客户,根据订购日期&谁在过去30天内花费最多。这些可以合并成一个吗 以下是我正在尝试的,我不确定DATEDIFF或查询将如何计算总金额 SELECT customer.customer

以下是模式:

Customer (Customer_ID, Name, Address, Phone),
Porder (Customer_ID, Pizza_ID, Quantity, Order_Date), 
Pizza (Pizza_ID, Name, Price).
我想让所有在过去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

整理好表格,并将订单细节与订单分开后需要考虑的事情

SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+

SELECT x.*
     , IF(x.i = y.maxi,1,0) is_biggest 
  FROM ints x 
  LEFT 
  JOIN (SELECT MAX(i) maxi FROM ints) y 
    ON y.maxi = x.i;
+---+------------+
| i | is_biggest |
+---+------------+
| 0 |          0 |
| 1 |          0 |
| 2 |          0 |
| 3 |          0 |
| 4 |          0 |
| 5 |          0 |
| 6 |          0 |
| 7 |          0 |
| 8 |          0 |
| 9 |          1 |
+---+------------+

请记住,函数对于查询优化器来说是黑盒,因此最好使查询适合索引,而不是相反

WHERE DATEDIFF(order.order_date,getdate()) between 0 and 30
可以重写,以便查询在
order\u 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

请注意,
order
是一个保留字。这使得表/列标识符的选择很糟糕。是否必须重命名该表?我如何识别它?你不必重命名它。你可以在引用它时使用反勾号。订单表中没有订单id也很奇怪。如果客户在同一订单上订购两个不同的比萨饼怎么办?你应该重命名它。否则你会让我们中的一个疯掉。现在的日期是在哪里定义的?应该是getdate()吗?哦,MySQL库。。。我最好利用它们。谢谢。没问题:)参考手册是一个很好的知识来源。呃,我想那是“间隔30天”