Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL - Контролирайте кой ред се връща от група от

Нарича се избор на групов максимум на колона. Ето няколко различни подхода за mysql.

Ето как бих го направил:

SELECT *
FROM (SELECT id, max(version_id) as version_id FROM table GROUP BY id) t1
INNER JOIN table t2 on t2.id=t1.id and t1.version_id=t2.version_id

Това ще бъде сравнително ефективно, въпреки че mysql ще създаде временна таблица в паметта за подзаявката. Предполагам, че вече имате индекс на (id, version_id) за тази таблица.

Дефицит в SQL е, че повече или по-малко трябва да използвате подзаявка за този тип проблеми ( полусъединени са друг пример).

Подзаявките не са добре оптимизирани в mysql, но некорелираните подзаявки не са толкова лоши, стига да не са толкова огромни, че да бъдат записани на диска, а не в паметта. Като се има предвид, че в тази заявка има само две int, подзаявката може да бъде с милиони редове много преди това да се случи, но подзаявката select * в първата ви заявка може да пострада от този проблем много по-рано.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql вмъкване в 2 таблици

  2. Функция MySQL LOG10() – Връщане на логаритъм на база 10 на стойност

  3. proxysql-admin Алтернативи - ClusterControl ProxySQL GUI

  4. Как да избирате от две таблици в MySQL, дори ако не всички редове в едната таблица имат кореспонденти в другата?

  5. Максимален брой записи в таблица на база данни на MySQL