Вы можете использовать оконные функции и агрегирование:
select id, min(datediff(date, lag_date)) diff
from (select id, date, lag(date) over(partition by id oder by date) lag_date from mytable) t
group by id
Внутренний запрос извлекает предыдущий date
для того же id
. Внешний запрос агрегирует по id
и вычисляет минимальную разницу дат.
Обратите внимание, что функции даты сильно зависят от базы данных, поэтому синтаксис для вычисления разницы между датами варьируется в зависимости от базы данных - в приведенном выше решении используется MySQL синтаксис, другие базы данных имеют альтернативный синтаксис, реализующий те же функции.