mysql - 具有两个不同日期范围的请求

标签 mysql sql select inner-join

我在使用 MySQL 发出两个不同日期范围的请求时遇到了一个小问题。

我需要在 2014 年之前拥有 nb_saleslast_sales,但仅需要过去一年的频率

我想要的结果:

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

所以我尝试:

  1. 创建临时表并插入频率
  2. SELECT customer_idnb_saleslast_salesfrequen 以及 左外连接

第一步没问题,但第二步我没有任何结果或错误消息...当我想要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 ;

最佳答案

我终于找到了解决办法。
非常感谢您的帮助:)

DROP TABLE IF EXISTS tmp_frequence;
CREATE TEMPORARY TABLE tmp_frequence (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    client_id INT,   
    recence INT,
    frequence INT,
    montant 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 '2016-07-31 00:00:00' and '2017-07-31 23:59:59'
GROUP BY sales_flat_order.customer_id;


INSERT INTO tmp_frequence (client_id, recence, montant)
SELECT
sales_flat_order.customer_id,
DATEDIFF("2017-07-31",DATE_FORMAT(MAX(sales_flat_order_item.created_at),"%Y-%m-%d")) recence,
COUNT(sales_flat_order.grand_total) montant

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 
AND sales_flat_order_item.created_at BETWEEN '2014-05-22 00:00:00' and '2017-07-31 23:59:59'
AND qty_invoiced >0
AND sales_flat_order_item.sku NOT LIKE '%abo%'
AND sales_flat_order.total_qty_ordered < 5

GROUP BY customer_id;

SELECT tmp_frequence.client_id,MAX(tmp_frequence.recence) Recence,MAX(tmp_frequence.frequence) Frequence,MAX(tmp_frequence.montant) Montant
FROM tmp_frequence 
GROUP BY tmp_frequence.client_id; 

关于mysql - 具有两个不同日期范围的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45964456/

相关文章:

php - 删除表 MYSQL 中除前 100 行以外的所有行

iphone - 通过 SQLite 将核心数据与 SQL 或 MySQL 同步

sql - 使用 Postgres 聚合函数选择每个 GROUP BY 组中的第一行?

sql - 仅为特定用户启用 SQL Server 的 TCP 连接

sql - SQL Server 2008下可以使用星号(*)来过滤WHERE子句中的列吗?

mysql查询选择除某些内容之外的所有内容

php - 在angularjs中减去日期

sql - 在 Ruby on Rails 3 中组合 first_name 和 last_name 列的最佳方法?

mysql - COUNT() 和 Left Join 不起作用

mysql - 如何将 MySQL 子查询中的所有不同值选择到 group_concat 中?