【发布时间】:2017-08-30 15:32:22
【问题描述】:
我对 MySQL 提出了两个不同日期范围的请求有一点问题。
我需要有 nb_sales 和 last_sales 直到 2014 年,但 frequence 仅适用于过去一年。
我想要的结果:
customer_id | nb_sales | last_sales | frequence
---------------------------------------------------------------
Customer ID | Sales make by | How many days| How many sales
| the customer | since the | has been made
| | last sales? | this year?
第 1-3 列在第一个日期范围内:今天到 2014 年
第 4 列在第二个日期范围内:今天到 y-1
所以我尝试了:
- 创建一个临时表并插入频率
-
SELECTcustomer_id、nb_sales、last_sales 和 frequence 与LEFT OUTER JOIN
第一步没问题,但第二步我没有任何结果或错误消息......当我想LEFT OUTER JOIN我的临时表时发生这种情况:
LEFT OUTER JOIN tmp_frequence
ON tmp_frequence.client_id = sales_flat_order.customer_id
也许你有更好的主意?
CREATE TEMPORARY TABLE tmp_frequence (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
client_id INT,
frequence INT,
PRIMARY KEY (id)
);
INSERT INTO tmp_frequence (client_id, frequence)
SELECT sales_flat_order.customer_id, COUNT(sales_flat_order.entity_id)
FROM sales_flat_order
WHERE sales_flat_order.created_at BETWEEN '2014-05-22 00:00:00' and '2017-07-31 23:59:59'
GROUP BY sales_flat_order.customer_id;
/* ------------------------------ */
SELECT
-- * ,
sales_flat_order.customer_id customer_id,
COUNT(sales_flat_order.entity_id) nb_sales,
DATEDIFF("2017-07-31",DATE_FORMAT(MAX(sales_flat_order_item.created_at),"%Y-%m-%d")) last_sales,
tmp_frequence.frequence frequence
FROM adl_ec.sales_flat_order_item
LEFT OUTER JOIN sales_flat_order
ON sales_flat_order.entity_id = sales_flat_order_item.order_id
LEFT OUTER JOIN tmp_frequence
ON tmp_frequence.client_id=sales_flat_order.customer_id
WHERE sales_flat_order_item.created_at BETWEEN '2014-05-22 00:00:00' and '2017-07-31 23:59:59'
GROUP BY customer_id;
DROP TABLE tmp_frequence ;
【问题讨论】:
-
我不知道您所说的“暂时性”是什么意思,但是您的
WHERE子句正在将您的LEFT JOIN转换为INNER JOIN。外部表的条件需要包含在外部联接的ON子句中,因为在返回外部联接的NULL结果之后 执行WHERE子句。除此之外,我真的不知道你想做什么来提供任何帮助...... -
需要查看数据样本(和预期结果)
-
“不工作”是什么意思?什么是“工作”?这段代码应该做什么?请阅读minimal reproducible example 并采取行动。您需要向我们解释一切的图像,因为我们不知道您在说什么——因为我们不知道。同样“提出具有两个时间性的请求”也没有意义。另请阅读教科书内连接和左连接的定义。
-
感谢您的帮助,并为我的英语感到抱歉...我已根据您告诉我的信息编辑了帖子。也许现在更清楚了?
-
您的
WHERE中有一个Spacesales_flat_order_item .created_at对您的实际查询也是如此吗?
标签: mysql sql select inner-join