sql >> Database teknologi >  >> RDS >> Mysql

mysql hvordan man får 2. højeste værdi med gruppe ved og i en venstre join

For det første behøver du slet ikke en tredje deltagelse. Du kan lave din beregning i én join:

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;

Får den næststørste værdi for mb bruger derefter et trick, der involverer substring_index() og 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;

Ideen er at sammenkæde værdierne i rækkefølge efter mb . Tag derefter det andet element på listen. Den ene ulempe er, at værdien konverteres til en tegnstreng, selv når den starter som et tal.




  1. Dvalekriterier for få poster, der har år 2012

  2. MySQL-opdatering første forekomst af en post

  3. Hvad betyder et kolon før et bogstaveligt tal i en SQL-sætning?

  4. Hvordan får jeg en forespørgselsudførelsesplan i SQL Server?