Antwort #3 am: 12. November 2018, 02:35:46
Hallo blaster31,
wenn Du den gleichen Artikel in mehr als einer Kategorie hast, ist die Auswertung nicht exakt ermittelbar, denn der Shop loggt nicht, aus welcher Kategorie ein Artikel bestellt wurde.
Als workaround hier eine Abfrage, die nach Monat und Kategorie gruppiert die letzten 12 Monate inkl Vergleichsmonat des Vorjahres betrachtet und die Umsatzsummen pro Monat absteigend sortiert. Bei den Kategorien habe ich, um eine eindeutige Zuordnung zwischen Artikel und Kategorie zu bekommen, immer jeweils die älteste Kategorie (kleinste ID) verwendet, kannst auch eine andere Methodik verwenden, Hauptsache eindeutig. Denn wenn Du nicht auf eine Kategorie pro Artikel einschränkst, bekommst Du falsche Summen, da dann Artikel mehrfach gezählt werden:
SELECT date_format(o.date_purchased, '%Y-%m') monat, cd.categories_name kategorie, round(SUM(op.final_price), 2) umsatz
FROM orders o
JOIN orders_products op ON op.orders_id = o.orders_id
-- Artikel-Kategorienrelation auf eindeutig reduziert
JOIN (SELECT products_id, MIN(categories_id) categories_id
FROM products_to_categories
GROUP BY 1) p2c ON p2c.products_id = op.products_id
JOIN categories_description cd ON cd.categories_id = p2c.categories_id
-- aktueller Monat und 12 Vormonate, gleitend
WHERE date_format(o.date_purchased, '%Y-%m') >= date_format(CURRENT_DATE - INTERVAL 12 MONTH, '%Y-%m')
GROUP BY 1, 2
-- nach Zeit und Umsatz absteigend sortiert
ORDER BY 1 DESC, 3 DESC
Versandkosten und Auftragsstatus sind da noch nicht enthalten, aber möglicherweise reicht das schon für Deine Fragestellung oder gibt Dir einen Ansatz.
Grüße, Volker