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 
nicméně řešení s JOINEM mi přišlo elegantnější.
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';

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0