在存在前后记录的地方获取丢失的记录

Getting missing records where the record before and after exists

我在构建一个查询时遇到问题,该查询显示缺失的记录,而之前和之后的记录都存在。例如:

Ticket #
  123
  125

我想要return的是:

  124

我比较的table是TicketsTicketBooks。 Tickets 存放所有使用过的门票,而 TicketBooks 存放所有已发行(已使用和可能未使用)的 Tickets。我正在使用的当前查询显示了所有丢失的记录。

select TicketNum, TicketBookNum, UnitID, DateIssued, IssuedBy
from TicketBooks
where not exists(select TicketNum
             from Tickets 
             where Tickets.TicketNum=TicketBooks.TicketNum)

当用户发出 TicketBook 时,发出了 25 张票。因此,如果第一本书发行并且使用了 100-110 的票并且已经使用了 112 我希望查询 return this:

Ticket #
  111

我不想查询 return 113、114、115 等...任何想法将不胜感激。

另外,车票可以发给多个单位,一个单位可以开1-25的票,另一个单位可以开200-225的票。这使我无法将搜索限制为最高票。

TicketBooks 中的数据不包含最小票和最大票。 table 中的值如下:

  TicketBooks
  -------------
  TicketBookNum
  TicketNum
  UnitID
  Active

我相信以下查询是您想要的:

select TicketNum, TicketBookNum, UnitID, DateIssued, IssuedBy
from TicketBooks
where TicketNum not in (select TicketNum from Tickets) 
AND TicketNum + 1 in (select TicketNum from Tickets) 
AND TicketNum - 1 in (select TicketNum from Tickets) 

此查询将显示所有 "TicketBooks" 条记录,这些记录没有相应的 "Tickets" 条记录,并且在该 TicketNum 之前和之后有 "Tickets" 条记录。

如果我没理解错的话,你想把漏票限制在最大使用价值之前:

select tb.TicketNum, tb.TicketBookNum, tb.UnitID, tb.DateIssued, tb.IssuedBy
from TicketBooks tb
where not exists (select 1
                  from Tickets t
                  where t.TicketNum = tb.TicketNum
                 ) and
      tb.TicketNum < (select max(tb2.TicketNum) from TicketBooks tb2);