Создавайте строки для каждой минуты во временных диапазонах

# #sql #datetime #google-bigquery

Вопрос:

У меня есть такая таблица в BigQuery:

ID отметка времени начала метка времени окончания
1 2021-02-05 21:45:57 UTC 2021-02-05 21:48:17 UTC
2 2021-02-05 23:12:01 UTC 2021-02-05 23:13:42 UTC

Мне нужно создать строки для каждой минуты, включенной во временной диапазон между меткой времени начала и меткой времени окончания.

ожидаемый результат:

ID отметка времени начала метка времени окончания
1 2021-02-05 21:45:00 UTC 2021-02-05 21:46:00 UTC
1 2021-02-05 21:46:00 UTC 2021-02-05 21:47:00 UTC
1 2021-02-05 21:47:00 UTC 2021-02-05 21:48:00 UTC
1 2021-02-05 21:48:00 UTC 2021-02-05 21:49:00 UTC
2 2021-02-05 23:12:00 UTC 2021-02-05 23:13:00 UTC
2 2021-02-05 23:13:00 UTC 2021-02-05 23:14:00 UTC

Как я могу сделать это с помощью BigQuery?

пример входных данных:

 WITH
  example_table AS (
  SELECT
    1 AS id,
    TIMESTAMP('2021-02-05 21:45:57') AS start_timestamp,
    TIMESTAMP('2021-02-05 21:48:17') AS end_timestamp
  UNION ALL
  SELECT
    2 AS id,
    TIMESTAMP('2021-02-05 23:12:01') AS start_timestamp,
    TIMESTAMP('2021-02-05 23:13:42') AS end_timestamp)
SELECT * FROM example_table;
 

Спасибо за любую помощь.

Ответ №1:

Рассмотрим следующий подход

 select id, 
  ts as start_timestamp, 
  ts   interval 1 minute as end_timestamp
from example_table,
unnest(generate_timestamp_array(
  timestamp_trunc(start_timestamp, minute), 
  timestamp_trunc(end_timestamp, minute), 
  interval 1 minute
) ) ts         
 

если применить к образцам данных в вашем вопросе — вывод будет

введите описание изображения здесь

Комментарии:

1. Спасибо, это работает по мере необходимости.