WITH RentalIntervals AS (
-- Use LEAD to get the rental_date of the next rental for the same drive
SELECT
rental_id,
return_date,
LEAD(rental_date) OVER (PARTITION BY rental_id ORDER BY rental_date) AS next_rental_date
FROM
rental
HAVING COUNT(rental_id) > 1)
-- Calculate the difference in days and then the average
SELECT
AVG(DATEDIFF(next_rental_date, return_date)) AS avg_days_between_rentals
FROM
RentalIntervals
WHERE
next_rental_date IS NOT NULL
AND DATEDIFF(next_rental_date, return_date) >= 0; -- Ensure the next rental is not before the return