Autor | Zpráva | ||
---|---|---|---|
jval Profil * |
Zdravím, mám SQL dotaz:
SELECT money_users.*, Max(bill.date) AS last_bill, bill.end_amount AS money, rate.rate FROM `money_users` LEFT JOIN (SELECT user_id, date, end_amount FROM money_bills ORDER BY date DESC) bill USING (`user_id`) LEFT JOIN (SELECT user_id, date, rate FROM money_rates WHERE date <= '2016-09-06' ORDER BY date DESC) rate USING (`user_id`) WHERE group_id > 1 AND deleted = 0 GROUP BY `money_users`.`user_id` ORDER BY money_users.deleted, money_users.group_id, money_users.realname Který mi na verzi MySQL 5.6.16 funguje správně, ale na hostingu na verzi MySQL 5.6.15 mi do položky money nedá sumu z posledního záznamu z tabulky money_bills ale tu z prvního. Je to jen verzí MySQL nebo mám něco špatně. Jak bych případně mohl upravit SQL dotaz abych dostal do money konečný stav účtu? Díky předem za pomoc. Tak zatím jsem to vyřešil subselectama SELECT money_users.*, (SELECT date FROM money_bills WHERE user_id = money_users.user_id ORDER BY date DESC LIMIT 1) AS last_bill, (SELECT end_amount FROM money_bills WHERE user_id = money_users.user_id ORDER BY date DESC LIMIT 1) AS money, rate.rate FROM `money_users` LEFT JOIN (SELECT user_id, date, rate FROM money_rates WHERE date <= '2016-09-06' ORDER BY date DESC) rate USING (`user_id`) WHERE group_id > 1 AND deleted = 0 GROUP BY `money_users`.`user_id` ORDER BY money_users.deleted, money_users.group_id, money_users.realname |
||
Keeehi Profil |
Myslím si, že to bude sloupec, podle kterého se neagreguje a ani na tom není použita žádná agregační funkce. V takovém případě ti některé jiné databáze vynadají. V MySQL to však projde ovšem kterou položku si to z toho seznamu vybere není definované. Může to být první, může to být poslední, mů že to být úplně jakákoli.
Doporučil bych tedy zapnout mód, který takto nekonzistentní dotaz nepustí. SET sql_mode = 'ONLY_FULL_GROUP_BY'; |
||
Časová prodleva: 8 let
|
0