# #google-bigquery
#google-bigquery
Вопрос:
Я протестировал два способа определения того, превышает ли разница между двумя событиями заданный порог, и обнаружил, что второй (использование ) кажется более последовательным. TIMESTAMP_DIFF
TIMESTAMP_SUB(finished_at, INTERVAL 24 HOUR) lt; created_at
TIMESTAMP_DIFF(finished_at, created_at, HOUR) gt; 24
Но я не понимаю, почему TIMESTAMP_SUB
это не дает того же результата.
Ответ №1:
TIMESTAMP_SUB()
вычитается точное количество единиц времени. TIMESTAMP_DIFF()
вернет все запрошенное количество единиц времени. Таким образом, разница в 23 часа и 55 минут вернет TIMESTAMP_DIFF()
23 часа. Смотреть ниже:
with data as ( select cast('2021-11-29 20:40:40.010832 UTC' as timestamp) as created_at, cast('2021-11-30 20:35:40.010832 UTC' as timestamp) as finished_at --cast('2021-11-30 20:45:40.010832 UTC' as timestamp) as finished_at ) select created_at, finished_at, timestamp_sub(finished_at, interval 24 hour) as finished_sub24, timestamp_sub(finished_at, interval 24 hour) gt;= created_at as finished_sub24_gt_created, timestamp_diff(finished_at, created_at, hour) as finished_created_diff_hours from data
Переключите finished_at
метки времени, чтобы показать, как он ведет себя с разницей в 24 часа и 05 минут.
Если вам нужна большая точность, вы можете рассмотреть возможность использования 24 * 60 минут или 24 * 60 * 60 секунды.