我有一张发票明细表,其中包含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 10
到detail_id
12.我该怎么做?
答案 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;
基本上,这会检查记录数是否与最小值和最大值给出的范围相匹配。