Ниже для BigQuery STandard SQL
#standardSQL
SELECT t1.starttime, t1.endtime
FROM `project.dataset.table1` t1
JOIN `project.dataset.table2` t2
ON TIME(t1.endtime) BETWEEN PARSE_TIME('%T', t2.starttime) AND PARSE_TIME('%T', t2.endtime)
Вы можете протестировать, поиграть с выше, используя фиктивные данные из вашего вопроса:
#standardSQL
WITH `project.dataset.table1` AS (
SELECT 1 id, TIMESTAMP '2018-07-20 06:45:00 UTC' starttime, TIMESTAMP '2018-07-20 06:48:08 UTC' endtime UNION ALL
SELECT 2, '2018-07-20 06:45:00 UTC', '2018-07-20 08:58:08 UTC'
), `project.dataset.table2` AS (
SELECT 1 id, '06:45:00' starttime, '06:50:00' endtime UNION ALL
SELECT 2, '14:45:00', '14:50:00'
)
SELECT t1.starttime, t1.endtime
FROM `project.dataset.table1` t1
JOIN `project.dataset.table2` t2
ON TIME(t1.endtime) BETWEEN PARSE_TIME('%T', t2.starttime) AND PARSE_TIME('%T', t2.endtime)