Bird
Raised Fist0
SQLquery~10 mins

Date range overlap detection in SQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Date range overlap detection
Start with two date ranges
↓
Check if start1 <= end2
Yes↓
Check if end1 >= start2
Yes↓
Date ranges overlap
No↓
No overlap
↓
End
We check if two date ranges overlap by verifying if the start of one range is before or on the end of the other, and vice versa.
Execution Sample
SQL
SELECT * FROM events e1
JOIN events e2 ON e1.id != e2.id
WHERE e1.start_date <= e2.end_date
  AND e1.end_date >= e2.start_date;
This query finds pairs of events where their date ranges overlap.
Execution Table
Stepe1.start_datee1.end_datee2.start_datee2.end_dateCondition e1.start_date <= e2.end_dateCondition e1.end_date >= e2.start_dateOverlap?
12024-01-012024-01-102024-01-052024-01-15TrueTrueYes
22024-01-012024-01-102024-01-112024-01-20TrueFalseNo
32024-02-012024-02-102024-01-252024-02-05TrueTrueYes
42024-03-012024-03-102024-03-112024-03-20TrueFalseNo
52024-04-012024-04-102024-03-252024-04-01TrueTrueYes
62024-05-012024-05-102024-05-112024-05-20FalseFalseNo
Exit------No more pairs to check
💡 All pairs checked; no more rows to compare.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6Final
e1.start_date2024-01-012024-01-012024-02-012024-03-012024-04-012024-05-01--
e1.end_date2024-01-102024-01-102024-02-102024-03-102024-04-102024-05-10--
e2.start_date2024-01-052024-01-112024-01-252024-03-112024-03-252024-05-11--
e2.end_date2024-01-152024-01-202024-02-052024-03-202024-04-012024-05-20--
Condition e1.start_date <= e2.end_dateTrueTrueTrueTrueTrueFalse--
Condition e1.end_date >= e2.start_dateTrueFalseTrueFalseTrueFalse--
Overlap?YesNoYesNoYesNo--
Key Moments - 2 Insights
Why do we check both conditions e1.start_date <= e2.end_date and e1.end_date >= e2.start_date?
Because both conditions together ensure the date ranges actually overlap. Checking only one condition can give false positives. See execution_table rows 2 and 4 where one condition is true but the other is false, so no overlap.
Why do we exclude pairs where e1.id = e2.id in the join?
Because an event cannot overlap with itself. The condition e1.id != e2.id avoids comparing the same row to itself, which would always overlap.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at step 3, what is the value of condition e1.end_date >= e2.start_date?
AUnknown
BTrue
CFalse
DNot checked
💡 Hint
Check the column 'Condition e1.end_date >= e2.start_date' at row 3 in execution_table.
At which step does the overlap condition evaluate to No because e1.end_date < e2.start_date?
AStep 2
BStep 1
CStep 5
DStep 6
💡 Hint
Look for rows where 'Overlap?' is No and 'Condition e1.end_date >= e2.start_date' is False.
If e1.start_date was after e2.end_date, what would happen to the overlap condition?
AOverlap would be Unknown
BOverlap would be Yes
COverlap would be No
DOverlap would depend on other conditions
💡 Hint
Refer to the first condition 'e1.start_date <= e2.end_date' in the concept_flow and execution_table.
Concept Snapshot
Date range overlap detection:
Check if two ranges overlap by verifying:
start1 <= end2 AND end1 >= start2
If both true, ranges overlap.
Use in SQL JOIN conditions to find overlapping rows.
Full Transcript
This visual execution shows how to detect if two date ranges overlap in SQL. We compare two date ranges by checking if the start of the first range is on or before the end of the second, and if the end of the first range is on or after the start of the second. The execution table walks through example pairs of dates, showing which conditions are true or false and whether the ranges overlap. The variable tracker shows how the dates and conditions change step by step. Key moments clarify why both conditions are needed and why we exclude comparing the same row. The quiz tests understanding of the conditions and their results. This method helps find overlapping events or bookings in databases.

Practice

(1/5)
1. What does date range overlap detection in SQL help you find?
SELECT * FROM bookings WHERE start_date <= '2024-05-10' AND end_date >= '2024-05-05';
easy
A. If dates are in the future only
B. If two date ranges share any common days
C. If dates are stored as strings
D. If one date range is completely before another

Solution

  1. Step 1: Understand the condition

    The query checks if the booking's start date is on or before May 10 and the end date is on or after May 5.
  2. Step 2: Interpret the overlap logic

    This means the booking period overlaps with the date range May 5 to May 10.
  3. Final Answer:

    If two date ranges share any common days -> Option B
  4. Quick Check:

    Date overlap means shared days = D [OK]
Hint: Check if start <= other end and end >= other start [OK]
Common Mistakes:
  • Thinking overlap means one range is inside another
  • Confusing date comparison operators
  • Ignoring equal dates as overlap
2. Which SQL WHERE clause correctly detects overlap between two date ranges (start1, end1) and (start2, end2)?
easy
A. WHERE start1 < end2 AND end1 > start2
B. WHERE start1 > end2 OR end1 < start2
C. WHERE start1 = end2 AND end1 = start2
D. WHERE start1 <= end2 AND end1 >= start2

Solution

  1. Step 1: Recall overlap condition

    Two ranges overlap if the start of one is on or before the end of the other, and the end of one is on or after the start of the other.
  2. Step 2: Match condition to options

    WHERE start1 <= end2 AND end1 >= start2 uses <= and >= which correctly includes touching dates as overlap.
  3. Final Answer:

    WHERE start1 <= end2 AND end1 >= start2 -> Option D
  4. Quick Check:

    Overlap needs <= and >=, not just < or > [OK]
Hint: Use <= and >= to include touching dates as overlap [OK]
Common Mistakes:
  • Using < and > excludes touching dates
  • Using OR instead of AND
  • Checking equality only
3. Given the table events(event_id, start_date, end_date) with data:
1, '2024-05-01', '2024-05-05'
2, '2024-05-04', '2024-05-10'
3, '2024-05-11', '2024-05-15'

What rows will this query return?
SELECT * FROM events WHERE start_date <= '2024-05-06' AND end_date >= '2024-05-04';
medium
A. Rows with event_id 1 and 2
B. Rows with event_id 2 and 3
C. Only row with event_id 2
D. All rows

Solution

  1. Step 1: Check each event against the condition

    Condition: start_date <= '2024-05-06' AND end_date >= '2024-05-04'.
    Event 1: start '2024-05-01' <= '2024-05-06' (true), end '2024-05-05' >= '2024-05-04' (true) -> included.
    Event 2: start '2024-05-04' <= '2024-05-06' (true), end '2024-05-10' >= '2024-05-04' (true) -> included.
    Event 3: start '2024-05-11' <= '2024-05-06' (false) -> excluded.
  2. Step 2: Determine final result set

    Only events 1 and 2 satisfy the overlap condition.
  3. Final Answer:

    Rows with event_id 1 and 2 -> Option A
  4. Quick Check:

    Events overlapping May 4-6 are 1 and 2 [OK]
Hint: Test each row's start and end against the range [OK]
Common Mistakes:
  • Including event 3 which starts after the range
  • Ignoring the >= condition on end_date
  • Assuming only exact matches count
4. Identify the error in this SQL query intended to find overlapping bookings:
SELECT * FROM bookings WHERE start_date > '2024-05-01' AND end_date < '2024-05-10';
medium
A. All of the above
B. It uses > and < instead of >= and <=, missing overlaps
C. It only finds bookings fully inside the range, not overlapping ones
D. It excludes bookings that start or end exactly on the boundary dates

Solution

  1. Step 1: Analyze the condition logic

    The query uses start_date > '2024-05-01' and end_date < '2024-05-10', which means it only selects bookings fully inside the range, excluding those starting or ending exactly on the boundaries.
  2. Step 2: Understand overlap detection requirements

    Overlap detection requires using <= and >= to include touching dates and also to detect partial overlaps, not just fully contained bookings.
  3. Step 3: Combine observations

    All options B, C, and D are true, so the query is incorrect for overlap detection.
  4. Final Answer:

    All of the above -> Option A
  5. Quick Check:

    All B, C, D are errors = A [OK]
Hint: Use inclusive operators and allow partial overlaps [OK]
Common Mistakes:
  • Using strict > and < excludes boundary overlaps
  • Assuming fully inside means overlap
  • Not testing edge cases
5. You have a table reservations(id, start_date, end_date). Write a query to find all reservations that overlap with a new booking from '2024-06-10' to '2024-06-15'. Which query correctly detects overlaps including edge cases?
hard
A. SELECT * FROM reservations WHERE start_date < '2024-06-15' AND end_date > '2024-06-10';
B. SELECT * FROM reservations WHERE start_date BETWEEN '2024-06-10' AND '2024-06-15';
C. SELECT * FROM reservations WHERE start_date <= '2024-06-15' AND end_date >= '2024-06-10';
D. SELECT * FROM reservations WHERE end_date BETWEEN '2024-06-10' AND '2024-06-15';

Solution

  1. Step 1: Understand overlap with inclusive edges

    Overlap means any shared day, including when one reservation ends exactly when the new booking starts or vice versa.
  2. Step 2: Evaluate each option

    SELECT * FROM reservations WHERE start_date < '2024-06-15' AND end_date > '2024-06-10'; uses < and > which excludes exact boundary matches.
    SELECT * FROM reservations WHERE start_date <= '2024-06-15' AND end_date >= '2024-06-10'; uses <= and >= which includes edge overlaps.
    Options C and D only check if start or end is inside the new booking range, missing some overlaps.
  3. Step 3: Choose the correct query

    SELECT * FROM reservations WHERE start_date <= '2024-06-15' AND end_date >= '2024-06-10'; correctly detects all overlaps including edge cases.
  4. Final Answer:

    SELECT * FROM reservations WHERE start_date <= '2024-06-15' AND end_date >= '2024-06-10'; -> Option C
  5. Quick Check:

    Inclusive operators catch all overlaps = B [OK]
Hint: Use <= and >= to catch all overlaps including edges [OK]
Common Mistakes:
  • Using < and > excludes edge overlaps
  • Using BETWEEN misses partial overlaps
  • Checking only start or end date
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard