TSQL Challenge 13 - Logic Testing



Solutions that passed the Basic Testing are tested with a 'tricky' set of data, which we call "Logic Testing". Here is the tricky data set used for the evaluation of TSQL Challenge 13

Script to generate the Logic Testing Data

DECLARE @t TABLE(
    InvID INT IDENTITY,
    BatchNumber INT,
    InvoiceNumber INT,
    VisitDate DATETIME,
    Amount MONEY )

INSERT INTO @t(BatchNumber, InvoiceNumber, VisitDate, Amount)
SELECT 10000001,20001,'2009-01-01',50.00 UNION ALL
SELECT 10000001,20001,'2009-01-02',50.00 UNION ALL
SELECT 10000001,20001,'2009-01-03',50.00 UNION ALL
SELECT 10000001,20001,'2009-01-04',50.00 UNION ALL
SELECT 10000001,20002,'2009-01-01',50.00 UNION ALL
SELECT 10000001,20002,'2009-01-02',50.00 UNION ALL
SELECT 10000001,20002,'2009-01-03',50.00 UNION ALL
SELECT 10000001,20003,'2009-01-01',50.00 UNION ALL
SELECT 10000001,20003,'2009-01-02',50.00 UNION ALL
SELECT 10000001,20004,'2009-01-01',50.00 UNION ALL
SELECT 10000001,20004,'2009-01-02',50.00 UNION ALL
SELECT 10000001,20004,'2009-01-03',50.00 UNION ALL
SELECT 10000001,20004,'2009-01-04',50.00 UNION ALL
SELECT 10000001,20004,'2009-01-05',50.00 UNION ALL
SELECT 10000001,20004,'2009-01-06',50.00 UNION ALL
SELECT 10000001,20005,'2009-01-01',50.00 UNION ALL
SELECT 10000001,20005,'2009-01-02',50.00 UNION ALL
SELECT 10000001,20005,'2009-01-13',50.00 UNION ALL
SELECT 10000001,20005,'2009-01-14',50.00 UNION ALL
SELECT 10000001,20005,'2009-01-15',50.00 UNION ALL
SELECT 10000001,20005,'2009-01-06',50.00 UNION ALL
SELECT 10000001,20005,'2009-01-07',50.00 UNION ALL
SELECT 10000001,20005,'2009-01-08',50.00 UNION ALL
SELECT 10000001,20006,'2009-01-01',50.00 UNION ALL
SELECT 10000002,20007,'2009-01-01',50.00 UNION ALL
SELECT 10000002,20007,'2009-01-02',50.00 UNION ALL
SELECT 10000002,20007,'2009-01-03',50.00 UNION ALL
SELECT 10000002,20008,'2009-01-01',50.00 UNION ALL
SELECT 10000002,20008,'2009-01-02',50.00 UNION ALL
SELECT 10000002,20008,'2009-01-03',50.00;

INSERT INTO @t(BatchNumber, InvoiceNumber, VisitDate, Amount)
SELECT 90000001,30001,'2009-01-01',50.00 UNION ALL
SELECT 90000001,30001,'2009-01-02',50.00 UNION ALL
SELECT 90000001,30001,'2009-01-03',50.00 UNION ALL
SELECT 90000001,30001,'2009-01-04',50.00 UNION ALL
SELECT 90000001,30001,'2009-01-05',50.00 UNION ALL
SELECT 90000001,30001,'2009-01-06',50.00 UNION ALL
SELECT 90000001,30001,'2009-01-07',50.00 UNION ALL
SELECT 90000001,30001,'2009-01-08',50.00 UNION ALL
SELECT 90000001,30001,'2009-01-09',50.00 UNION ALL
SELECT 90000001,30001,'2009-01-10',50.00 UNION ALL

SELECT 90000001,30002,'2009-01-01',50.00 UNION ALL
SELECT 90000001,30002,'2009-01-02',50.00 UNION ALL
SELECT 90000001,30002,'2009-01-03',50.00 UNION ALL
SELECT 90000001,30002,'2009-01-04',50.00 UNION ALL
SELECT 90000001,30002,'2009-01-05',50.00 UNION ALL
SELECT 90000001,30002,'2009-01-06',50.00 UNION ALL

SELECT 90000001,30003,'2009-01-01',50.00 UNION ALL
SELECT 90000001,30003,'2009-01-02',50.00 UNION ALL
SELECT 90000001,30003,'2009-01-03',50.00 UNION ALL
SELECT 90000001,30003,'2009-01-04',50.00 UNION ALL
SELECT 90000001,30003,'2009-01-05',50.00 UNION ALL
SELECT 90000001,30003,'2009-01-06',50.00 UNION ALL

SELECT 90000001,30004,'2009-01-01',50.00 UNION ALL
SELECT 90000001,30004,'2009-01-02',50.00 UNION ALL
SELECT 90000001,30004,'2009-01-03',50.00 UNION ALL
SELECT 90000001,30004,'2009-01-04',50.00 UNION ALL
SELECT 90000001,30004,'2009-01-05',50.00 UNION ALL
SELECT 90000001,30004,'2009-01-06',50.00 UNION ALL

SELECT 90000001,30015,'2009-01-03',90.00 UNION ALL
SELECT 90000001,30015,'2009-01-02',90.00 UNION ALL
SELECT 90000001,30015,'2009-01-01',90.00 UNION ALL
SELECT 90000001,30006,'2009-01-01',50.00 UNION ALL
SELECT 90000001,30006,'2009-01-02',50.00 UNION ALL
SELECT 90000001,30006,'2009-01-03',50.00 UNION ALL
SELECT 90000001,30007,'2009-01-01',50.00 UNION ALL
SELECT 90000001,30007,'2009-01-02',50.00 UNION ALL
SELECT 90000001,30007,'2009-01-03',50.00 UNION ALL
SELECT 90000001,30007,'2009-01-04',50.00 UNION ALL

SELECT 90000001,30008,'2009-01-01',50.00 UNION ALL
SELECT 90000001,30008,'2009-01-02',50.00 UNION ALL
SELECT 90000001,30008,'2009-01-03',50.00 UNION ALL
SELECT 90000001,30008,'2009-01-04',50.00 UNION ALL
SELECT 90000001,30008,'2009-01-05',50.00 UNION ALL
SELECT 90000001,30009,'2009-01-01',50.00 UNION ALL
SELECT 90000001,30009,'2009-01-02',50.00 UNION ALL
SELECT 90000001,30009,'2009-01-03',50.00 UNION ALL
SELECT 90000001,30009,'2009-01-04',50.00 UNION ALL
SELECT 90000001,30009,'2009-01-05',50.00 UNION ALL

SELECT 90000001,30010,'2009-01-01',50.00 UNION ALL

SELECT 30000001,40001,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40002,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40003,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40004,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40005,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40006,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40007,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40008,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40009,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40010,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40011,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40012,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40013,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40014,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40015,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40016,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40017,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40018,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40019,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40020,'2009-01-01',50.00 UNION ALL
SELECT 30000001,40021,'2009-01-01',50.00 ;

Expected Output

InvID BatchNumber InvoiceNumber VisitDate  Amount Set
----- ----------- ------------- ---------- ------ ---
1     10000001    20001         2009-01-01 50.00  1
2     10000001    20001         2009-01-02 50.00  1
3     10000001    20001         2009-01-03 50.00  1
4     10000001    20001         2009-01-04 50.00  1
5     10000001    20002         2009-01-01 50.00  1
6     10000001    20002         2009-01-02 50.00  1
7     10000001    20002         2009-01-03 50.00  1
8     10000001    20003         2009-01-01 50.00  1
9     10000001    20003         2009-01-02 50.00  1
10    10000001    20004         2009-01-01 50.00  2
11    10000001    20004         2009-01-02 50.00  2
12    10000001    20004         2009-01-03 50.00  2
13    10000001    20004         2009-01-04 50.00  2
14    10000001    20004         2009-01-05 50.00  2
15    10000001    20004         2009-01-06 50.00  2
16    10000001    20005         2009-01-01 50.00  3
17    10000001    20005         2009-01-02 50.00  3
18    10000001    20005         2009-01-13 50.00  3
19    10000001    20005         2009-01-14 50.00  3
20    10000001    20005         2009-01-15 50.00  3
21    10000001    20005         2009-01-06 50.00  3
22    10000001    20005         2009-01-07 50.00  3
23    10000001    20005         2009-01-08 50.00  3
24    10000001    20006         2009-01-01 50.00  3
25    10000002    20007         2009-01-01 50.00  1
26    10000002    20007         2009-01-02 50.00  1
27    10000002    20007         2009-01-03 50.00  1
28    10000002    20008         2009-01-01 50.00  1
29    10000002    20008         2009-01-02 50.00  1
30    10000002    20008         2009-01-03 50.00  1
31    90000001    30001         2009-01-01 50.00  1
32    90000001    30001         2009-01-02 50.00  1
33    90000001    30001         2009-01-03 50.00  1
34    90000001    30001         2009-01-04 50.00  1
35    90000001    30001         2009-01-05 50.00  1
36    90000001    30001         2009-01-06 50.00  1
37    90000001    30001         2009-01-07 50.00  1
38    90000001    30001         2009-01-08 50.00  1
39    90000001    30001         2009-01-09 50.00  1
40    90000001    30001         2009-01-10 50.00  1
41    90000001    30002         2009-01-01 50.00  2
42    90000001    30002         2009-01-02 50.00  2
43    90000001    30002         2009-01-03 50.00  2
44    90000001    30002         2009-01-04 50.00  2
45    90000001    30002         2009-01-05 50.00  2
46    90000001    30002         2009-01-06 50.00  2
47    90000001    30003         2009-01-01 50.00  3
48    90000001    30003         2009-01-02 50.00  3
49    90000001    30003         2009-01-03 50.00  3
50    90000001    30003         2009-01-04 50.00  3
51    90000001    30003         2009-01-05 50.00  3
52    90000001    30003         2009-01-06 50.00  3
53    90000001    30004         2009-01-01 50.00  4
54    90000001    30004         2009-01-02 50.00  4
55    90000001    30004         2009-01-03 50.00  4
56    90000001    30004         2009-01-04 50.00  4
57    90000001    30004         2009-01-05 50.00  4
58    90000001    30004         2009-01-06 50.00  4
59    90000001    30015         2009-01-03 90.00  6
60    90000001    30015         2009-01-02 90.00  6
61    90000001    30015         2009-01-01 90.00  6
62    90000001    30006         2009-01-01 50.00  4
63    90000001    30006         2009-01-02 50.00  4
64    90000001    30006         2009-01-03 50.00  4
65    90000001    30007         2009-01-01 50.00  5
66    90000001    30007         2009-01-02 50.00  5
67    90000001    30007         2009-01-03 50.00  5
68    90000001    30007         2009-01-04 50.00  5
69    90000001    30008         2009-01-01 50.00  5
70    90000001    30008         2009-01-02 50.00  5
71    90000001    30008         2009-01-03 50.00  5
72    90000001    30008         2009-01-04 50.00  5
73    90000001    30008         2009-01-05 50.00  5
74    90000001    30009         2009-01-01 50.00  6
75    90000001    30009         2009-01-02 50.00  6
76    90000001    30009         2009-01-03 50.00  6
77    90000001    30009         2009-01-04 50.00  6
78    90000001    30009         2009-01-05 50.00  6
79    90000001    30010         2009-01-01 50.00  6
80    30000001    40001         2009-01-01 50.00  1
81    30000001    40002         2009-01-01 50.00  1
82    30000001    40003         2009-01-01 50.00  1
83    30000001    40004         2009-01-01 50.00  1
84    30000001    40005         2009-01-01 50.00  1
85    30000001    40006         2009-01-01 50.00  1
86    30000001    40007         2009-01-01 50.00  1
87    30000001    40008         2009-01-01 50.00  1
88    30000001    40009         2009-01-01 50.00  1
89    30000001    40010         2009-01-01 50.00  1
90    30000001    40011         2009-01-01 50.00  2
91    30000001    40012         2009-01-01 50.00  2
92    30000001    40013         2009-01-01 50.00  2
93    30000001    40014         2009-01-01 50.00  2
94    30000001    40015         2009-01-01 50.00  2
95    30000001    40016         2009-01-01 50.00  2
96    30000001    40017         2009-01-01 50.00  2
97    30000001    40018         2009-01-01 50.00  2
98    30000001    40019         2009-01-01 50.00  2
99    30000001    40020         2009-01-01 50.00  2
100   30000001    40021         2009-01-01 50.00  3

Only a very small number of solutions passed the Logic Testing. Many solutions that worked well with the basic sample data, broke when tested with the tricky data. Here are the list of submissions that passed the Logic Testing.