Запит з двома різними діапазонами дат - mysql, sql, select, internal-join

Я маю невелику проблему з MySQL для того, щоб зробити запит з двома датами.

Мені потрібно мати nb_sales і last_sales до 2014 року але частота тільки за минулий рік.

Результат я хочу:

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_id, nb_sales, last_sales і частота з 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 ;

Відповіді:

0 для відповіді № 1

Я нарешті знайшов рішення.
Дякую вам за вашу допомогу :)

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;

Схожі запитання
Найбільш популярний