# #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. Спасибо, это работает по мере необходимости.