Google bigquery BigQuery UDF以在另一个表中查找最大值

Google bigquery BigQuery UDF以在另一个表中查找最大值,google-bigquery,user-defined-functions,Google Bigquery,User Defined Functions,我有一些类似这样的数据,其中我有一个不同类型的事件列表,事件发生的时间,以及事件关联的用户。事件A每个用户只发生一次,但事件B可以发生多次 我想把它变成这样: 逻辑如下: 我查询该表以提取每个用户发生事件的时间列表 对于每一行,我会找到事件B发生在事件A之前的最近时间 第一点很简单,大致是 SELECT User, Time AS Event_A_Time FROM Raw_Data WHERE Event = 'Event A' 我陷入困境的是如何得到第三列。它需要像这样的东西 SELECT

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

我想把它变成这样:

逻辑如下:

我查询该表以提取每个用户发生事件的时间列表 对于每一行,我会找到事件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将其融入语法中的问题。感谢您的帮助

这种计算不需要自定义项。试试这个:

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

谢谢但据我所知,这将给我最大的事件时间,不管它是高于还是低于事件时间?对不起,我误解了。你能看到这个编辑是否有效吗?它发现B的最大时间小于A的时间。谢谢,这非常有用: