Autor | Zpráva | ||
---|---|---|---|
Gullator Profil * |
#1 · Zasláno: 14. 10. 2015, 09:39:58
Dobrý den,
napsal jsem si SQL dotaz do e-shopu, kdy zjišťuji jak se v měsících měnila průměrná doba odeslání zboží od jeho objednání. SQL dotaz vypadá následovně - SELECT AVG(DATEDIFF(os.time, o.ordered)) AS prumerna_hodnota, YEAR(os.time) AS groupYear, MONTH(os.time) AS groupMonth FROM orders AS o LEFT JOIN order_status_history os ON o.id = os.order_id WHERE os.status_id = 2 GROUP BY groupyear, groupmonth A rád bych měl v selectu ještě průměrnou hodnotu z minulého měsíce. Vůbec netuším jak se k tomu dostat. Zkoušel jsem ještě LEFT JOIN s ON na -1 měsíc. Ale to vykazovalo špatné hodnoty, tak jsem usoudil že to nebude správné řešení. Předem díky za nakopnutí. |
||
Kajman Profil |
#2 · Zasláno: 14. 10. 2015, 10:42:56
Gullator:
Pokud to máte v mysql, tak bych porovnání dělal raději až v aplikační vrstvě při vypisování (tedy s v php zapamatovat průměrnou hodnotu minulého řádku a tu pak porovnat s aktuálním řádkem. |
||
Gullator Profil * |
#3 · Zasláno: 14. 10. 2015, 10:54:46
Vyřešeno včetně procentuálního rozdílu:
SELECT AVG(DATEDIFF(os.time, o.ordered)) AS average_value, previous_month.average_value AS previous_value, YEAR(os.time) AS groupYear, MONTH(os.time) AS groupMonth, ROUND(((AVG(DATEDIFF(os.time, o.ordered)) - previous_month.average_value) / AVG(DATEDIFF(os.time, o.ordered)) * 100), 2) percentage_diff FROM orders AS o LEFT JOIN order_status_history os ON o.id = os.order_id LEFT JOIN ( SELECT AVG(DATEDIFF(os.time, o.ordered)) AS average_value, YEAR(os.time) AS groupYear, MONTH(os.time) AS groupMonth FROM orders AS o LEFT JOIN order_status_history os ON o.id = os.order_id WHERE os.status_id = 2 GROUP BY DATE_FORMAT(os.`time`, '%Y%my') ) AS previous_month ON previous_month.groupYear = YEAR(SUBDATE(os.time, INTERVAL 1 MONTH)) AND previous_month.groupMonth = MONTH(SUBDATE(os.time, INTERVAL 1 MONTH)) WHERE os.status_id = 2 GROUP BY DATE_FORMAT(os.`time`, '%Y%my') ORDER BY groupYear DESC, groupMonth DESC; |
||
Časová prodleva: 9 let
|
0