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