@@ -5,7 +5,7 @@ FIRST @pageSize@
5
5
FROM table(MULTISET(
6
6
SELECT
7
7
p.problem_id
8
- , c.component_id
8
+ , c.component_id
9
9
, ro.room_id
10
10
, rc.round_id
11
11
, rc.division_id
@@ -16,15 +16,62 @@ SELECT
16
16
WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 3) THEN 'Hard'::nvarchar(50)
17
17
END AS difficulty
18
18
, rc.points
19
- , 'New' AS status
20
- , 0 AS my_points
19
+ , NVL(CASE WHEN EXISTS (
20
+ SELECT 1
21
+ FROM component_state cs
22
+ WHERE cs.status_id < 120
23
+ AND cs.component_id = c.component_id
24
+ AND cs.coder_id = @userId@
25
+ UNION ALL
26
+ SELECT 1
27
+ FROM practice_component_state pcs
28
+ WHERE pcs.status_id < 120
29
+ AND pcs.component_id = c.component_id
30
+ AND pcs.coder_id = @userId@
31
+ ) THEN 'New'::nvarchar(50)
32
+ WHEN EXISTS (
33
+ SELECT 1
34
+ FROM component_state cs
35
+ WHERE cs.status_id = 150
36
+ AND cs.component_id = c.component_id
37
+ AND cs.coder_id = @userId@
38
+ UNION ALL
39
+ SELECT 1
40
+ FROM practice_component_state pcs
41
+ WHERE pcs.status_id = 150
42
+ AND pcs.component_id = c.component_id
43
+ AND pcs.coder_id = @userId@
44
+ ) THEN 'Solved'::nvarchar(50)
45
+ WHEN EXISTS (
46
+ SELECT 1
47
+ FROM component_state cs
48
+ WHERE cs.status_id >= 120
49
+ AND cs.component_id = c.component_id
50
+ AND cs.status_id != 150
51
+ AND cs.coder_id = @userId@
52
+ UNION ALL
53
+ SELECT 1
54
+ FROM practice_component_state pcs
55
+ WHERE pcs.status_id >= 120
56
+ AND pcs.component_id = c.component_id
57
+ AND pcs.status_id != 150
58
+ AND pcs.coder_id = @userId@
59
+ ) THEN 'Viewed'::nvarchar(50)
60
+ END, 'New') AS status
61
+ , NVL((
62
+ SELECT
63
+ points
64
+ FROM practice_component_state pcs
65
+ WHERE pcs.round_id = rc.round_id
66
+ AND pcs.component_id = c.component_id
67
+ AND pcs.coder_id = @userId@
68
+ ), 0) AS my_points
21
69
FROM problem p
22
70
INNER JOIN component c ON c.problem_id = p.problem_id
23
71
INNER JOIN round_component rc ON rc.component_id = c.component_id
24
72
INNER JOIN round r ON r.round_id = rc.round_id AND r.status = 'A' AND r.round_type_id = 3
25
73
INNER JOIN room ro ON ro.round_id = rc.round_id AND ro.room_type_id = 3 -- practice room
26
74
INNER JOIN problem_type_lu ptl ON ptl.problem_type_id = p.problem_type_id
27
- INNER JOIN contest con ON con.contest_id = r.contest_id
28
75
WHERE p.status_id = 90
29
76
)) srp
30
77
WHERE 1=1
0 commit comments