Compute unique duration by merging intervals
Company: Nuro
Role: Data Engineer
Category: Data Manipulation (SQL/Python)
Difficulty: easy
Interview Round: Technical Screen
## Problem
You have an autonomous-driving clip dataset where each row represents a time interval from a driving run.
### Table: `clips`
| column | type | description |
|---|---|---|
| `set_id` | INT | Session/clip set identifier (e.g., 1–6) |
| `run_id` | STRING | Driving run identifier, formatted like `YYYYMMDD_HHMMSS` |
| `start_time` | INT | Clip start time offset (e.g., seconds) |
| `end_time` | INT | Clip end time offset (e.g., seconds) |
| `set_number` | INT | Dataset/source identifier |
Assume each interval is **half-open**: `[start_time, end_time)` so duration is `end_time - start_time`.
Intervals for the same `run_id` may:
- overlap (partially or fully),
- be duplicated/redundant,
- have gaps (non-contiguous).
## Task
Compute, for **each `run_id`**, the **cumulative deduplicated time**: the total duration covered by the **union** of all intervals for that `run_id` (i.e., after merging overlaps).
## Example input
For run `20250101_122334`:
- set 1: `[58, 70)`
- set 2: `[57, 69)`
- set 3: `[55, 72)`
- set 4: `[56, 71)`
- set 5: `[80, 100)`
For run `20250102_101010`:
- set 6: `[43, 62)`
## Expected output
Return a result with:
- `run_id`
- `cumulative_unique_time` (same unit as the time offsets)
Using the example above, results would be:
- `20250101_122334` → `39`
- `20250102_101010` → `19`
## Requirements
1. Write a **SQL** solution to compute `cumulative_unique_time` per `run_id`.
2. Write a **Python** solution to compute the same metric (given a list/dataframe of intervals).
Overview: This question evaluates a data engineer's proficiency in temporal data manipulation and interval-set reasoning using SQL and Python, specifically skills in merging overlapping intervals and computing deduplicated cumulative durations.
Read the full Nuro Data Engineer interview experience this question came from
你有一个自动驾驶数据片段表,每行是一段时间区间(start_time, end_time),同一个 run_id 下可能有多个区间,区间之间可能重叠或不连续。
请用 SQL 计算每个 run_id 的“累计去重时间”(把该 run_id 下所有区间合并后得到的不重叠总时长)。
计算口径:区间时长按 (end_time - start_time) 计算;合并后的总时长为所有合并区间时长之和。
输出:run_id, cumulative_unique_time。
注意:start_time 和 end_time 是整数(可理解为秒数),并且 end_time > start_time。
Tables
drive_clip_intervals(set_id INT, run_id VARCHAR(32), start_time INT, end_time INT, set_number INT)
Hints
- 先按 run_id 分区、按 start_time 排序,判断当前区间是否与前面已覆盖到的最大 end_time 重叠。
- 可以用窗口函数计算 running max(end_time),并用“gaps and islands”思路给可合并的区间打组。