BigQuery:运行 最后一个值和 table 加入

BigQuery: running last value and table join

Table_1 是我的销售额 table:

Time | item | ...
-----------------
 1   |  X   | ...
 1   |  Y   | ...
 2   |  X   | ...
 4   |  X   | ...
 6   |  X   | ...
 6   |  Y   | ...

Table_2 是我的费用 table

Time | item | Cost
-----------------
 1   |  X   | a
 1   |  Y   | b
 3   |  X   | c
 4   |  X   | d
 4   |  Y   | e
 5   |  X   | f

我想要实现的是:
对于 Table_1 中的每一行,从 Table_2 获取最新的成本值(即最多 Table_1 行的时间)

结果应如下所示:

Time | item | ... | Cost
------------------------
 1   |  X   | ... | a
 1   |  Y   | ... | b
 2   |  X   | ... | a
 4   |  X   | ... | d
 6   |  X   | ... | f
 6   |  Y   | ... | e

(我知道传统 SQL 在 SELECT 部分使用子查询或不等连接很简单,但 BigQuery 不允许)

尝试以下:

SELECT sales.time AS [time], sales.item AS item, cost 
FROM (
  SELECT sales.item, sales.time, cost, 
         cost.time - sales.time AS delta,
         ROW_NUMBER() OVER(PARTITION BY sales.item, sales.time ORDER BY delta DESC) AS win
  FROM Table_1 as sales
  LEFT JOIN Table_2 as cost
  ON sales.item = cost.item
  WHERE cost.time - sales.time <= 0
) 
WHERE win = 1
ORDER BY 1, 2

应该会给您准确的结果

time    item    cost     
   1       x       a     
   1       y       b     
   2       x       a     
   4       x       d     
   6       x       f     
   6       y       e