sql >> Databáze >  >> RDS >> Mysql

mysql jak získat 2. nejvyšší hodnotu se skupinou a v levém spojení

Za prvé, třetí připojení vůbec nepotřebujete. Výpočet můžete provést jedním spojením:

from (select id
      from owner
      where date_format(auction_date,'%Y-%m-%d %H:%i:00') = date_format(NOW(),'%Y-%m-%d %H:%i:00')
     ) as a left join
     (select owner_id, max(nb) as maxbid, max(mb) as maxautobi
      from auction
      group by owner_id
     ) b
     on a.id=b.owner_id;

Získání druhé největší hodnoty pro mb pak použije trik zahrnující substring_index() a group_concat() :

   from (select id
          from owner
          where date_format(auction_date,'%Y-%m-%d %H:%i:00') = date_format(NOW(),'%Y-%m-%d %H:%i:00')
         ) as a left join
         (select owner_id, max(nb) as maxbid, max(mb) as maxautobi,
                 substring_index(substring_index(group_concat(mb order by mb desc), ',', 2), ',', -1
                                ) as second_mb
          from auction
          group by owner_id
         ) b
         on a.id=b.owner_id;

Cílem je zřetězit hodnoty dohromady v pořadí podle mb . Pak vezměte druhý prvek seznamu. Nevýhodou je, že hodnota je převedena na znakový řetězec, i když začíná jako číslo.




  1. proč tento dotaz MySQL vytváří nesprávná čísla řádků?

  2. Jak omezit pokusy o přihlášení - PHP &MySQL &CodeIgniter

  3. Připojení tabulky PHP-Mysql z jiného hostitele

  4. PHP ORA-01745:neplatný název proměnné hostitele/vazby Varování