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

Pierwsza wolna liczba MySQL pomiędzy istniejącymi wartościami

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

Jak to działa

  1. Lewo Dołącz do pro_servers z pro_servers z server_port = server_port + 1 warunek dołączenia i podjęcia wierszy, gdzie jest null w następnym Port. Te wiersze pokazują pierwsze porty z każdej luki. Identyfikator portu można przyjąć jako server_port + 1 .

  2. Zabierz wszystkie usunięte porty.

  3. Union 1. i 2., zamów według server_port i weź pierwszy.

Jest jedno założenie dla odpowiedzi - zawsze brany jest port o najniższym numerze. Jeśli to nieprawda, sprawdź ten port osobno (lub dodaj kolejny UNION ALL do zapytania).



  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 Count(*) jako suma GDZIE suma?

  2. Importuj bazę danych do MySQL lub MariaDB

  3. Jak prawidłowo unikać warunków wyścigu Mysql?

  4. php, mysql - Zbyt wiele połączeń z błędem bazy danych

  5. Zduplikowany wpis na INSERT po DELETE z tabeli w transakcji