sql >> Database >  >> RDS >> Mysql

mysql hoe de 2e hoogste waarde te krijgen met groep door en in een linker join

Ten eerste heb je helemaal geen derde join nodig. U kunt uw berekening in één keer doen:

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;

De op één na grootste waarde krijgen voor mb gebruikt dan een truc, waarbij substring_index() . betrokken is en 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;

Het idee is om de waarden samen te voegen, gerangschikt op mb . Neem dan het tweede element van de lijst. Het enige nadeel is dat de waarde wordt geconverteerd naar een tekenreeks, zelfs als deze begint als een getal.




  1. Connect DATABASE Fout TYPE:2002:Toestemming geweigerd

  2. ERROR 2003 (HY000):Kan geen verbinding maken met MySQL-server op AWS RDS

  3. Is het mogelijk om sql-servergegevens te selecteren met behulp van de ordinale positie van de kolom?

  4. Mysql gebruiken in de opdrachtregel in osx - opdracht niet gevonden?