У меня есть таблица BigQuery, как показано ниже:BigQuery - Пользовательские Лаг Смещение при использовании функции Лаг
date hits_eventInfo_Category hits_eventInfo_Action session_id user_id hits_time hits_eventInfo_Label
20151021 Air Search 1445001 A232 1952 City1
20151021 Air Select 1445001 A232 2300 Vendor1
20151021 Air Search 1445001 A111 1000 City2
20151021 Air Search 1445001 A111 1900 City3
20151021 Air Select 1445001 A111 7380 Vendor2
20151021 Air Search 1445001 A580 1000 City4
20151021 Air Search 1445001 A580 1900 City5
20151021 Air Search 1445001 A580 1900 City6
20151021 Air Select 1445001 A580 7380 Vendor3
В таблице показаны активности пользователей для 3-х пользователей - A232, A111 и A580, такие, что:
i) A232 - Made 1 Search at 'City1' and chose 'Vendor1' from 'City1'
ii) A111 - Made the 1st search at 'City2' and did not choose any vendor from there. Made a 2nd search at 'City3' and then ultimately chose a 'Vendor2' from here.
iii) A580 - 1st search at 'City4', no vendor chosen. 2nd search at 'City5', no vendor chosen. 3rd search at 'City6', 'Vendor3' chosen from City6.
Меня интересует только получение города, из которого пользователь фактически выбрал поставщика, то есть не заинтересовался предыдущими поисками пользователя, которые не привели к выбору поставщика.
Требуемая мощность таблицы:
date hits_eventInfo_Category hits_eventInfo_Action session_id user_id hits_time city vendor
20151021 Air Search 1445001 A232 1952 City1 Vendor1
20151021 Air Search 1445001 A111 1900 City3 Vendor2
20151021 Air Search 1445001 A580 1900 City6 Vendor3
Я пытался сделать это с помощью функции LAG над полем hits_eventInfo_eventLabel после разделения на user_id и упорядоченности по hits_time т.е. LAG(hits_eventInfo_eventLabel,1) OVER(PARTITION BY user_id ORDER BY hits_time)
Однако, поскольку я использую мое отставание смещено как 1, приведенное выше выражение помогает мне получить желаемый результат только для пользователя A232 (поскольку он сделал только 1 поиск, что означает предыдущую запись, прежде чем выбирать поставщика - это, безусловно, поисковая запись).
Есть ли способ, которым я могу сделать это выражение лаги более динамичным, чтобы оно извлекало только ближайшее место поиска, прежде чем делать выбор - независимо от того, сколько поисков было сделано до того, как был сделан выбор?
ИЛИ
Есть ли альтернативная функция/маршрут, который я могу предпринять, чтобы достичь этого?