Получите разрывы нумерации с SQL

У меня есть таблица инвентаря со следующей структурой:

table1
Id
Box_number
Описание
Активный

И предположим, у вас есть это содержимое:

1 - 1 - box1 - 1
2 - 2 - box2 - 1
3 - 3 - box3 - 0
4 - 4 - box4 - 1

Поле Activo используется для логического удаления. То есть, если он существует физически в депозите, он идет с Activo = 1, если он не находится физически в депозите, он идет с Activo = 0. То есть ящик 3 (Box_number) будет физически доступен. Поэтому, если я хочу добавить новое поле, содержимое таблицы должно выглядеть следующим образом:

1 - 1 - description1 - 1
2 - 2 - description2 - 1
3 - 3 - описание3 - 0
4 - 4 - описание4 - 1
5 - 3 - описание5 - 1

Как мне сделать через query, чтобы показать мне первое доступное отверстие (наименьшее) (Active = 1), то есть в предыдущем примере, чтобы сказать, что 3 доступно.

1
задан 19.10.2016, 20:56
3 ответа

Я думаю, что это решение, что estÃ: s ища:

select coalesce(
          min(t1.numero_de_caja),
          (select coalesce(max(numero_de_caja), 0) + 1
             from tabla1)
       )
  from tabla1 t1
 where t1.activo = 0
   and not exists (select null
                     from tabla1 t2
                    where t2.numero_de_caja = t1.numero_de_caja
                      and t2.activo = 1)

того, что я понимаю, состоит в том, что ты хочешь número ящика больше pequeño с activo = 0, но где он не существует ningún reg¦-stro с activo = 1. И не нахождения ningún número ящика, который уважал бы этот критерий, тогда deber¦, - чтобы возвращать número ящика больше pequeño, что никогда не был использован раньше в таблице.

1
ответ дан 24.11.2019, 13:02
  • 1
    Точный, n и # 250; простой м и # 225; s парень, что не est и # 233; в Активе = 1, или который est и # 233; в Активе = 0. Консультация, которую ты переместил меня, я возвратился и # 243; NULL – Pepemujica 19.10.2016, 21:10
  • 2
    Ok, я сделал настройку. Я верю в то, что сейчас s и # 237; он делает то, что ты просишь. – sstan 19.10.2016, 22:04
  • 3
    Большое спасибо!!! – Pepemujica 19.10.2016, 22:14
  • 4
    Я искал форму contarctarte, но не увидел opci и # 243; n частного сообщения. У меня есть другая проблема, связанная с этим, quiz и # 225; s немного м и # 225; s комплекс. Если ты мог давать мне другую руку ты быть и # 237; в очень благодарный: D es.stackoverflow.com/questions/29058/… – Pepemujica 21.10.2016, 00:42
  • 5
    Я верю в то, что уже soluci и # 243; ne! – Pepemujica 21.10.2016, 03:23

Может быть с

select * from tabla1 -- traemos todos los datos del registro

where Activo = 0 -- solo traemos activos

order by Numero_de_caja -- ordenamos ascendentemente por numero de caja

limit 0,1 -- con esto solo traemos el primer registro
0
ответ дан 24.11.2019, 13:02
  • 1
    Prob и # 233; это, но под некими circunstacias оно не функционирует. Например: – Pepemujica 19.10.2016, 20:11
  • 2
    Если я считаю активным ящик 1 и дезактивированная ящик 1, не быть должным и # 237; чтобы появляться n и # 250; морской окунь 1 – Pepemujica 19.10.2016, 20:11
  • 3
    То, в чем я нуждаюсь, состоит в том, чтобы видеть cu и # 225; l он первый n и # 250; простой легкореализуемый актив. Если нет пустот, я использую того, который следует за ним в и #250; ltimo – Pepemujica 19.10.2016, 20:12
  • 4
    Ok, ты смог бы объясни мне второй комментарий , Если я считаю активным ящик 1 и дезактивированная ящик 1 – jasilva 19.10.2016, 20:14
  • 5
    S и # 237; конечно. – Pepemujica 19.10.2016, 20:15

Не entendà - очень хорошо, но Â: Не ser¦ - в asÃ-?

select * from tabla1
where Numero_de_caja = 3
and   Activo in (select min(Activo) from tabla1
                 where Numero_de_caja = 3)
0
ответ дан 24.11.2019, 13:02
  • 1
    Но быть должным и # 237; чтобы быть деньгами и # 225; обезьяна, а именно, части where не будет быть всегда 3 – Pepemujica 19.10.2016, 20:14
  • 2
    Дело в том, что я entend и # 237; что доступное место seg и # 250; n n и # 250; морской окунь ящика, но если ты не хочешь использовать n и # 250; морской окунь ящика, тогда эксперта и # 237;: select * from tabla1 where Я Включаю in (select min (Актив) from tabla1) – Daniel Q. 19.10.2016, 20:38
  • 3
    То, что я хочу в действительности, состоит в том, чтобы показывать, который первый n и # 250; морской окунь доступного ящика, уже будьте, потому что est и # 225; бездеятельный, или потому что никогда он не был utiizado – Pepemujica 19.10.2016, 21:04
  • 4
    Ok, если ты только манипулируешь двумя статусами, 0 для ящиков, которые существовали и уже не est и # 225; n и 1 для ящиков, что если est и # 225; n, podr и # 237; чтобы быть экспертом и # 237;: select * from tabla1 where Numero_de_caja in (select min(Numero_de_caja) where Activo = 0), но если это ящики, которые никогда не существовали, и у тебя есть ящики 1, 2, 4 и 5, 3, что никогда я не существовал, и # 243; он не будет выходить у тебя с queries. Ах и # 237; ты должен искать другой soluci и # 243; n. – Daniel Q. 19.10.2016, 21:37
  • 5
    Именно это это, что я ищу xD – Pepemujica 19.10.2016, 21:46