Ich habe ein kleines Problem mit MySQL für eine Anfrage mit zwei verschiedenen Datumsbereichen.Anfrage mit zwei verschiedenen Datumsbereichen
brauche ich nb_sales und last_sales bis 2014 aber Frequenz haben nur für das vergangene Jahr.
Das Ergebnis ich will:
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?
Spalte 1-3 im ersten Datumsbereich sind: heute bis 2014
Säule 4 in einem seconde Datumsbereich: heute y-1
Also habe ich versucht zu:
- eine temporäre Tabelle erstellen und einfügen frequence
SELECT
customer_id, nb_sales, last_sales und frequence mitLEFT OUTER JOIN
Der erste Schritt ist in Ordnung, aber für die zweite habe ich kein Ergebnis oder Fehlermeldung ... Und dies geschah, als wollte ich meine temporäre Tabelle LEFT OUTER JOIN
:
LEFT OUTER JOIN tmp_frequence
ON tmp_frequence.client_id = sales_flat_order.customer_id
Vielleicht haben Sie eine bessere Idee?
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 ;
Ich weiß nicht, was Sie von meinem „Zeitlichkeit“, aber Ihre 'WHERE' Klausel Ihrer' LEFT JOIN' in einen 'INNER JOIN' verwandelt. Die Bedingungen der äußeren Tabelle müssen in der ON-Klausel für den äußeren Join enthalten sein, da die WHERE-Klausel ausgeführt wird, nachdem die NULL-Ergebnisse der äußeren Verknüpfung zurückgegeben wurden. Ansonsten habe ich wirklich keine Ahnung, was Sie tun möchten, um Hilfe anzubieten ... – Siyual
müssen Daten Beispiel (und erwartete Ergebnisse) sehen – Horaciux
Was bedeutet "nicht funktioniert"? Was funktioniert? Was soll dieser Code tun? Bitte lesen und handeln Sie auf [mcve]. Bild, dass du uns alles erklären musst, weil wir keine Ahnung haben, wovon du sprichst - weil wir es nicht tun. Auch "eine Anfrage mit zwei Zeitlichkeiten zu machen" macht keinen Sinn. Lies auch Textbuchdefinitionen von innerem Join und linkem Join. – philipxy