【发布时间】:2020-04-02 10:40:48
【问题描述】:
我正在尝试创建一个列,该列填充每一行的交易 ID,直到该交易完成的行 - 在本例中,订单之前的每个“添加到购物篮”事件。
到目前为止,我已经尝试过使用FIRST_VALUE:
SELECT
UserID, date, session_id, hitnumber, add_to_basket, transactionid,
first_value(transactionid) over (partition by trans_part order by date, transactionid) AS t_id
FROM(
select UserID, date, session_id, hitnumber, add_to_basket, transactionid,
SUM(CASE WHEN transactionid IS NULL THEN 0 ELSE 1 END) OVER (ORDER BY date, transactionid) AS trans_part,
FIRST_VALUE(transactionid IGNORE NULLS)
OVER (PARTITION BY userid ORDER BY hitnumber ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS t_id,
from q1
join q2 using (session_id)
order by 1,2,3,4
)
但我得到的结果与我想要的相反,将前一个订单的交易 ID 填充到此交易之后发生的购物篮事件。
如何更改我的代码,以便在导致订单的购物篮事件之后看到订单的交易 ID?例如,在下表中,我想查看以 ...095 结尾的事务 ID,而不是 t_id 列的以 ...383 结尾的 id。
根据下面戈登的回答,我也尝试过:
last_value(transactionid ignore nulls) over(
order by hitnumber
rows between unbounded preceding and current row) as t_id2,
【问题讨论】:
标签: sql google-bigquery window-functions gaps-and-islands