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

MySQL първото свободно число между съществуващите стойности

SELECT data.sPort
FROM 
  ((SELECT (s.server_port + 1) sPort
  FROM pro_servers s
  LEFT JOIN pro_servers sp1 ON sp1.server_port = s.server_port + 1
  WHERE (sp1.server_port IS NULL)
  ORDER BY sPort)

  UNION ALL

  (SELECT s.server_port sPost
  FROM pro_servers s
   GROUP BY s.server_port
   HAVING COUNT(s.server_port) = SUM(s.server_deleted)
  ORDER BY sPort)) AS data
ORDER BY data.sPort
LIMIT 1

SqlFiddle:http://sqlfiddle.com/#!2/12ab1/2

Как работи

  1. Наляво Присъединете се към pro_servers с pro_servers с server_port = server_port + 1 условие за присъединяване и вземане на редове, където има null в следващия пристанище. Тези редове показват първите портове от всяка празнина. Идентификаторът на порта може да се приеме като server_port + 1 .

  2. Вземете всички изтрити портове.

  3. Съюз 1. и 2., подреждане по server_port и вземете първия.

Има едно предположение за отговор - винаги се взема порт с най-нисък номер. Ако не е вярно, проверете този порт отделно (или добавете друг UNION ALL към заявката).



  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. ГРЕШКА 1698 (28000):Достъпът е отказан за потребител 'root'@'localhost'

  3. Има ли начин да се генерира диаграма на UML клас от съществуваща MySQL база данни?

  4. python pymysql.err.OperationalError:(2013, „Загубена връзка с MySQL сървър по време на заявка“)

  5. MySQL:Времето за изчакване на заключване е превишено