Explain join types and edge cases, and describe how you would implement the solution using Scala with Hadoop-style data processing.
For the SQL portion, use the provided candidates, tests, and submissions tables. Include submissions from January 1, 2025 onward while preserving candidates with no qualifying submissions.
Output
- One row per candidate.
- Return
candidate_id, candidate_name, test_name, submissions_count, latest_submission_at, and attempt_status.
- Sort by
candidate_id ascending. Use not_attempted when no qualifying submission exists.