我有 2 個帶有紀元值的表。每分鐘有多個樣本,例如:
| ID | 名 | epoch_time |
|---|---|---|
| 1 | 保羅 | 1650317420 |
| 2 | 杰夫 | 1650317443 |
| 3 | 勞爾 | 1650317455 |
每分鐘 1 個樣本:
| ID | 家 | epoch_time |
|---|---|---|
| 1 | 紐約 | 1650317432 |
我想做的是加入兩個表之間最近的時間戳。理想情況下,找到表 1 和表 2 之間最接近的值,然后從表 1 和表 2 中填充一個欄位。我想填充“主頁”欄位并保持表 1 中的其余記錄不變,例如:
| ID | 姓名 | 家 | epoch_time |
|---|---|---|---|
| 1 | 保羅 | 紐約 | 1650317420 |
| 2 | 杰夫 | 紐約 | 1650317443 |
| 3 | 勞爾 | 紐約 | 1650317455 |
問題是實際加入。ID 不是唯一的,因此為什么我不僅需要加入 ID,還需要掃描兩個表之間最接近的紀元時間。我不能使用相關子查詢,因為 Presto 不支持相關子查詢。
uj5u.com熱心網友回復:
回答了我自己的問題。這很簡單,首先在每個分鐘樣本之間添加一些偏移量,例如 LEAD(),然后在當前分鐘樣本的表之間的連接中使用 BETWEEN,向前看 59 秒。這樣:
WITH tbl1 AS (
SELECT
*
FROM table_1
),
tbl2 AS (
SELECT
*,
LEAD(epoch_time) OVER (
PARTITION BY
name,
home
ORDER BY
epoch_time
) - 1 AS next_time
FROM table_2
)
SELECT
t1.Id,
t1.Name,
t2.Home,
t1.epoch_time
FROM tbl1 t1
LEFT JOIN tbl2 t2
ON t1.Id = t2.Id
AND t1.epoch_time BETWEEN t2.epoch_time AND t2.next_time
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460911.html
上一篇:代理模式
