Longest Meeting-Free Business-Hours Block per Employee and Day
Company: Intuit
Role: Machine Learning Engineer
Category: Data Manipulation (SQL/Python)
Difficulty: medium
Interview Round: Technical Screen
A company wants to measure uninterrupted time available for project work. Given meeting attendance intervals, return the longest meeting-free block within business hours for every employee on every supplied business day.
Write one read-only PostgreSQL query over these tables:
```sql
employees(employee_id BIGINT PRIMARY KEY)
business_days(work_date DATE PRIMARY KEY,
start_at TIMESTAMPTZ NOT NULL,
end_at TIMESTAMPTZ NOT NULL)
meeting_attendance(employee_id BIGINT NOT NULL,
meeting_id TEXT NOT NULL,
join_time TIMESTAMPTZ NOT NULL,
leave_time TIMESTAMPTZ NOT NULL)
```
Return `employee_id`, `work_date`, and `longest_free_seconds` as a nonnegative integer, ordered by `employee_id`, then `work_date`.
### Constraints & Assumptions
- The report supplies attendance columns but leaves the roster and business-hours calendar unspecified. The two supplementary fixture tables explicitly define those missing inputs for this SQL practice version.
- Every listed employee is in scope for every supplied business day. Include employees/days with no meetings.
- Each business interval satisfies `start_at < end_at`, has whole-second timestamps, and belongs to the stated `work_date` in the company's chosen calendar. Use those absolute boundaries directly rather than guessing a timezone from the date.
- Attendance rows have `join_time < leave_time`, whole-second timestamps, and valid employee IDs. Duplicate or overlapping rows may exist, including multiple joins to one meeting.
- Intervals are half-open. Clip each attendance interval to the business interval; ignore it if the clipped intersection is empty.
- Merge overlapping or touching occupied intervals before measuring free gaps. Count gaps before the first meeting and after the last meeting as well as gaps between meetings.
- Attendance may span multiple business days. Compute its intersection with each supplied day independently.
- An employee with no occupied time on a day has the full business interval free; an employee occupied for the entire interval has zero free seconds.
### Examples
If business hours are 09:00–17:00 and an employee attends 09:30–10:30 and 10:00–11:00, the merged occupied interval is 09:30–11:00. The longest free block is 11:00–17:00, or 21,600 seconds.
If another employee has no meetings that day, return 28,800 seconds for that employee/day. Do not omit the row because attendance is absent.
```hint Compare with the furthest prior end
A meeting can be contained inside an earlier longer meeting. When assigning occupied-interval groups, compare its start with the running maximum prior end rather than only the immediately preceding row's end.
```
Overview: Find each employee’s longest meeting-free business-hours interval using clipped attendance, merged overlaps, complete day coverage, and SQL window logic.
Read the full Intuit Machine Learning Engineer interview experience this question came from
A company wants to measure uninterrupted time available for project work. Given meeting attendance intervals, return the longest meeting-free block within business hours for every employee on every supplied business day.
Write one read-only PostgreSQL query over these tables:
```sql
employees(employee_id BIGINT PRIMARY KEY)
business_days(work_date DATE PRIMARY KEY,
start_at TIMESTAMPTZ NOT NULL,
end_at TIMESTAMPTZ NOT NULL)
meeting_attendance(employee_id BIGINT NOT NULL,
meeting_id TEXT NOT NULL,
join_time TIMESTAMPTZ NOT NULL,
leave_time TIMESTAMPTZ NOT NULL)
```
Return `employee_id`, `work_date`, and `longest_free_seconds` as a nonnegative integer, ordered by `employee_id`, then `work_date`.
### Constraints & Assumptions
- The report supplies attendance columns but leaves the roster and business-hours calendar unspecified. The two supplementary fixture tables explicitly define those missing inputs for this SQL practice version.
- Every listed employee is in scope for every supplied business day. Include employees/days with no meetings.
- Each business interval satisfies `start_at < end_at`, has whole-second timestamps, and belongs to the stated `work_date` in the company's chosen calendar. Use those absolute boundaries directly rather than guessing a timezone from the date.
- Attendance rows have `join_time < leave_time`, whole-second timestamps, and valid employee IDs. Duplicate or overlapping rows may exist, including multiple joins to one meeting.
- Intervals are half-open. Clip each attendance interval to the business interval; ignore it if the clipped intersection is empty.
- Merge overlapping or touching occupied intervals before measuring free gaps. Count gaps before the first meeting and after the last meeting as well as gaps between meetings.
- Attendance may span multiple business days. Compute its intersection with each supplied day independently.
- An employee with no occupied time on a day has the full business interval free; an employee occupied for the entire interval has zero free seconds.
### Examples
If business hours are 09:00–17:00 and an employee attends 09:30–10:30 and 10:00–11:00, the merged occupied interval is 09:30–11:00. The longest free block is 11:00–17:00, or 21,600 seconds.
If another employee has no meetings that day, return 28,800 seconds for that employee/day. Do not omit the row because attendance is absent.
```hint Compare with the furthest prior end
A meeting can be contained inside an earlier longer meeting. When assigning occupied-interval groups, compare its start with the running maximum prior end rather than only the immediately preceding row's end.
```
Tables
employees(employee_id BIGINT)
business_days(work_date DATE, start_at TIMESTAMP WITH TIME ZONE, end_at TIMESTAMP WITH TIME ZONE)
meeting_attendance(employee_id BIGINT, meeting_id TEXT, join_time TIMESTAMP WITH TIME ZONE, leave_time TIMESTAMP WITH TIME ZONE)