SQLite Найти пропущенные числа в диапазоне (3000-4000) - PullRequest
0 голосов
/ 29 августа 2018

Я ищу, чтобы найти самое низкое пропущенное число между 2 числами.

могут быть скачки между 3080 и 3085 и т. Д., И все, что мне нужно, это 3081. Это для назначения идентификатора записи, и эти записи могут быть удалены, таким образом, идентификатор тоже и, поскольку у нас ограниченный диапазон, мы хотим убедиться, что мы используем все числа. Так что, если нет пропущенных номеров, нужно будет взять следующий доступный номер. если он заполнен до 3850, то нужно будет захватить 3851.

Они равны 0, если они были удалены, а не ноль, если это помогает.

SELECT number, user_id
FROM entries
WHERE user_id = '18'
AND number BETWEEN '3000' AND '4000'

Я не уверен, как получить наименьший доступный номер в этой последовательности, пожалуйста, помогите. Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Попробуйте использовать самостоятельное соединение:

SELECT MIN(e1.number) + 1 num_missing
FROM entries e1
LEFT JOIN entries e2
    ON e2.number = e1.number + 1
WHERE e1.id = 18 AND e1.number BETWEEN 3000 AND 4000 AND
    e2.number IS NULL;

Критическим условием в предложении WHERE является e2.number IS NULL, что означает, что это конкретное число не имело следующего непосредственного значения в последовательности, т. Е. Это начало пробела.

0 голосов
/ 29 августа 2018

Если вы хотите следующий пропущенный номер для id, то:

select e.id, e.number + 1
from entries e
where not exists (select 1
                  from entries e2
                  where e2.id = e.id and e2.number = e.number + 1
                 );

Если вы хотите это для определенного id, то добавьте id = 18 к внешнему предложению where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...