SQL(BigQuery)使用lag()函数连接两个表
考虑到我有两张桌子 第一个: 用户id 名称 时间戳1 1. 购买 12 1. 购买 14 2. 购买 22 2. 购买 14SQL(BigQuery)使用lag()函数连接两个表,sql,google-bigquery,Sql,Google Bigquery,考虑到我有两张桌子 第一个: 用户id 名称 时间戳1 1. 购买 12 1. 购买 14 2. 购买 22 2. 购买 14 选择任意_值(t1)。*, 数组集合(结构(事件名称,时间戳2)按时间戳2描述限制1排序)[偏移量(0)]* 来自`project.dataset.table1`t1 交叉连接`project.dataset.table2`t2 其中t2.user_id=t1.user_id,timestamp2
选择任意_值(t1)。*,
数组集合(结构(事件名称,时间戳2)按时间戳2描述限制1排序)[偏移量(0)]*
来自`project.dataset.table1`t1
交叉连接`project.dataset.table2`t2
其中t2.user_id=t1.user_id,timestamp2
如果要应用于问题中的样本数据,则输出为
您可以在
user\u id
上使用join,然后使用row\u number()
按timestamp1
和timestamp2
之间的距离排序,从表2中获得最近的行:
SELECT user_id, name, timestamp1, event_name, timestamp2
FROM (
SELECT t1.*, t2.event_name, t2.timestamp2,
ROW_NUMBER() OVER(PARTITION BY t1.user_id, t1.timestamp1 ORDER BY ABS(t1.timestamp1 - t2.timestamp2)) AS rn
FROM table1 t1
INNER JOIN table2 t2
ON t1.user_id = t2.user_id
)
WHERE rn = 1
输出:
SELECT user_id, name, timestamp1, event_name, timestamp2
FROM (
SELECT t1.*, t2.event_name, t2.timestamp2,
ROW_NUMBER() OVER(PARTITION BY t1.user_id, t1.timestamp1 ORDER BY ABS(t1.timestamp1 - t2.timestamp2)) AS rn
FROM table1 t1
INNER JOIN table2 t2
ON t1.user_id = t2.user_id
)
WHERE rn = 1