Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL(BigQuery)使用lag()函数连接两个表_Sql_Google Bigquery - Fatal编程技术网

SQL(BigQuery)使用lag()函数连接两个表

SQL(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

考虑到我有两张桌子

第一个:

用户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
如果要应用于问题中的样本数据,则输出为


您可以在
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