Đầu tiên tôi sẽ liên kết các bảng (trong BigQuery, cú pháp cho liên hợp là dấu phẩy). Sau đó, có hai cách tiếp cận:
- Sử dụng các hàm phân tích FIRST_VALUE và LAST_VALUE.
SELECT id, timestamp_first, timestamp_last, data FROM
(SELECT
id,
timestamp,
FIRST_VALUE(timestamp) OVER(
PARTITION BY id
ORDER BY timestamp ASC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
AS timestamp_first,
LAST_VALUE(timestamp) OVER(
PARTITION BY id
ORDER BY timestamp ASC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
AS timestamp_last
FROM table1, table2, table3 - Sử dụng tổng hợp MIN / MAX trên dấu thời gian để tìm đầu tiên / cuối cùng và sau đó kết hợp trở lại các bảng giống nhau.
SELECT a.id id, timestamp_first, timestamp_last, data FROM (SELECT id, data FROM table1,table2,table3) a INNER JOIN (SELECT id, MIN(timestamp) timestamp_first, MAX(timestamp) timestamp_last FROM table1,table2,table3 GROUP BY id) b ON a.id = b.id