SELECT *,(SELECT CASE WHEN (SUM(CASE WHEN B.DEDate =1 THEN 1 ELSE 0 END AS IsnotProper from PersonRecord B INNER JOIN PersonRecord C ON C.PersonId = B.PersonId WHERE B.PersonID=A.PersonID AND B.VERSION<>C.VERSION AND B.VERSION<C.VERSION) AS [Is Not In Proper Order] from PersonRecord A GO
SELECT PersonRecord.*, COALESCE(NotProperOrderIds.NotInOrder, 0) [Is Not In Proper Order]FROM PersonRecordLEFT OUTER JOIN ( SELECT NotProperOrderRs.PersonId, 1 NotInOrder FROM PersonRecord NotProperOrderRs WHERE EXISTS( SELECT * FROM PersonRecord ex WHERE ex.PersonId = NotProperOrderRs.PersonId AND ex.version > NotProperOrderRs.version AND ex.DEDate < NotProperOrderRs.DEDate ) GROUP BY PersonId) NotProperOrderIds ON NotProperOrderIds.PersonId = PersonRecord.PersonIdGO
IF OBJECT_ID('PersonRecord') IS NOT NULL DROP TABLE PersonRecordGOCREATE TABLE PersonRecord ( PersonID int, Version int,DEDate datetime)goINSERT INTO PersonRecord VALUES(1,0,'03/10/2000')INSERT INTO PersonRecord VALUES(1,1,'03/16/2000')INSERT INTO PersonRecord VALUES(1,2,'03/19/2000')INSERT INTO PersonRecord VALUES(1,3,'03/18/2000')INSERT INTO PersonRecord VALUES(1,4,'03/17/2000')INSERT INTO PersonRecord VALUES(2,0,'02/10/2000')INSERT INTO PersonRecord VALUES(2,1,'02/11/2000')INSERT INTO PersonRecord VALUES(2,2,'02/18/2000')INSERT INTO PersonRecord VALUES(3,0,'03/25/2000')INSERT INTO PersonRecord VALUES(3,1,'03/23/2000')INSERT INTO PersonRecord VALUES(3,2,'03/26/2000')INSERT INTO PersonRecord VALUES(3,3,'03/30/2000')INSERT INTO PersonRecord VALUES(4,0,'08/19/2000')INSERT INTO PersonRecord VALUES(4,1,'08/20/2000')INSERT INTO PersonRecord VALUES(4,2,'08/24/2000')INSERT INTO PersonRecord VALUES(4,3,'08/23/2000') goSELECT *,(SELECT CASE WHEN (SUM(CASE WHEN B.DEDate =1 THEN 1 ELSE 0 END AS IsnotProper from PersonRecord B CROSS JOIN PersonRecord C WHERE B.PersonID=A.PersonID AND C.PersonID=A.PersonID AND B.VERSION<>C.VERSION AND B.VERSION<C.VERSION) AS [Is Not In Proper Order] from PersonRecord A GO