Đầ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