Короткий ответ В PostgreSQL выражение first_order_date - registration_date для двух значений типа date возвращает целое число дней. Для timestamp вычитание возвращает интервал с днями, часами и минутами. Как это работает подробнее Приведение временных меток к date отбрасывает время суток и измеряет разницу календарных дат. Если нужны полные двадцатичетырёхчасовые интервалы, вычисляйте длительность из временных меток, а не просто вычитайте даты. Синтаксис зависит от платформы: BigQuery предлагает DATE_DIFF(first_order_date, registration_date, DAY), ClickHouse — dateDiff('day', registration_date, first_order_date). Пример кода Что использовать на практике Сначала найдите первую покупку. Если исходная таблица содержит все заказы, вычислите MIN(order_date) по клиенту. Контролируйте качество. Отдельно исследуйте отрицательные значения и клиентов без заказов. Подводные камни Часовые пояса. Разные зоны способны изменить календарную дату события. NULL. Клиент без первого заказа получит NULL в разнице, а не ноль.