sql >> Databasteknik >  >> RDS >> Mysql

mysql hur man får 2:a högsta värdet med grupp av och i en vänster join

För det första behöver du inte en tredje join alls. Du kan göra din beräkning i en sammanfogning:

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 det näst största värdet för mb använder sedan ett trick som involverar substring_index() och 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;

Tanken är att sammanfoga värdena, sorterade efter mb . Ta sedan det andra elementet i listan. Nackdelen är att värdet konverteras till en teckensträng, även när det börjar som ett tal.




  1. PHP 5.5.0 med Microsoft SQL Server 2008 R2 - Ingen sqlsrv_connect()?

  2. Räkna förekomster av en understräng i en MySQL-kolumn

  3. Rails och MySQL - ActiveRecord::ConnectionNotEstablished in produktionsmiljö

  4. Implementering av Levenshtein-distans för mysql/fuzzy-sökning?