Có một cách tương đối hiệu quả để xác định xem dữ liệu có chính xác hay không - hầu như là vậy. Nó sẽ xác định xem có thiếu "1" s hoặc "2" trong dữ liệu hay không. Phiên bản này không xác định xem id đầu tiên có phải là "1" hay không, vì câu hỏi của bạn không đề cập đến điều đó.
Giải pháp tốt nhất là sử dụng lag()
và lead()
. Tuy nhiên, SQL Server 2008 không hỗ trợ các chức năng này. Vì vậy, chúng ta hãy tiếp cận điều này như một khoảng trống và những hòn đảo. Có bất kỳ trường hợp nào có nhiều hơn 1 "1" hoặc "2" liên tiếp cho một id
nhất định không ? Đoạn mã sau sẽ tìm thấy những điểm bất thường này:
select id, inoutid, count(*) as num_in_row,
from (select t.*,
row_umber() over (partition by id, inoutid order by date, hours, minute) as seqnum_ii,
row_umber() over (partition by id order by date, hours, minute) as seqnum_i
from t
) t
group by id, inoutid, (seqnum_i - seqnum_ii)
having count(*) > 1