如何找不到数字顺序的发票明细计数器列

时间:2018-01-30 02:04:41

标签: sql sql-server sql-server-2008

我有一张发票明细表,其中包含Invoice_ID和与每张发票相关联的Detail_id。例如:

Detail_ID      date_Created       Invoice_id       Description
   1           1/1/18 12:02:03       1            Service 1
   2           1/1/18 12:02:04       1            Service 2 
   3           1/1/18 12:02:05       1            Service 3
   4           1/1/18 12:06:03       2            Service 1
   5           1/1/18 12:06:04       2            Service 2 
   6           1/1/18 12:06:05       2            Service 3
   7           1/1/18 12:08:03       3            Service 1
   8           1/1/18 12:08:04       3            Service 2 
   9           1/1/18 12:08:05       3            Service 3
  10           1/1/18 12:12:03       4            Service 1
  12           1/1/18 12:12:05       4            Service 3

我想要做的是查询示例数据,并返回"Invoice_id"的{​​{1}}不是按顺序排列的"Detail_ID"。例如 - 上面注意,Invoice_id 4,从detail_id 10detail_id 12.我该怎么做?

1 个答案:

答案 0 :(得分:3)

(此答案假设ticket_id确实是invoice_id。)

在SQL Server 2012+中,您可以使用lag()。如果我假设没有重复detail_id s,那么你可以这样做:

select id.invoice_id
from invoice_detail id
group by id.invoice_id
having count(*) <> max(id.detail_id) - min(id.detail_id) + 1;

基本上,这会检查记录数是否与最小值和最大值给出的范围相匹配。