Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql jak uzyskać drugą najwyższą wartość w grupie przez i w lewym sprzężeniu

Po pierwsze, w ogóle nie potrzebujesz trzeciego sprzężenia. Możesz wykonać swoje obliczenia w jednym połączeniu:

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;

Pobieranie drugiej największej wartości dla mb następnie używa sztuczki, obejmującej substring_index() i 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;

Pomysł polega na łączeniu wartości razem, porządkując według mb . Następnie weź drugi element listy. Jedynym minusem jest to, że wartość jest konwertowana na ciąg znaków, nawet jeśli zaczyna się jako liczba.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać Entity Framework 6 z MySQL w ASP.NET 5?

  2. Usuń dane ze wszystkich tabel w MYSQL

  3. Wildfly 8.0.0 problemy mysql ze źródłem danych

  4. 10 pytań do rozmowy kwalifikacyjnej na temat bazy danych MySQL dla początkujących i średniozaawansowanych

  5. Używanie JDeveloper z bazą danych MySQL i bazą danych Oracle na AWS RDS, część 1