用于在另一个 table 中查找最大值的 BigQuery UDF

BigQuery UDF to find max values in another table

我有一些看起来像这样的数据,其中有不同类型的事件列表、事件发生的时间以及事件关联的用户。事件 A 每个用户只发生一次,但事件 B 可以发生多次。

我想把它变成这样:

逻辑如下:

  1. 我查询 table 以提取每个用户发生事件 A 的时间列表
  2. 对于每一行,我然后找到事件 B 在事件 A 之前发生的最近时间

第一点很简单,类似于

SELECT User, Time AS Event_A_Time FROM Raw_Data WHERE Event = 'Event A'

我卡住的地方是如何获得第三列。它需要类似于

SELECT MAX(Time) FROM Raw_Data WHERE Time < [Event_A_Time for this user]

我假设我需要为此使用 UDF,但我正在努力解决如何将其融入语法(使用标准 SQL)的问题。感谢任何帮助!

这种计算不需要 UDF。试试这个:

SELECT * EXCEPT(Event_B_Times),
  (SELECT MAX(time) FROM UNNEST(Event_B_Times) AS Time
   WHERE Time < Event_A_Time) AS Event_B_Time
FROM (
  SELECT
    User,
    MAX(IF(Event = 'Event A', Time, NULL)) AS Event_A_Time,
    ARRAY_AGG(IF(Event = 'Event B', Time, NULL) IGNORE NULLS) AS Event_B_Times
  FROM Raw_Data
  GROUP BY User
);