这是我的输出样本:
我需要为每次visitId获取第一条记录(使用最短时间)。
我尝试使用MIN函数,不包括GROUP BY列表中的hits.time:
SELECT STRFTIME_UTC_USEC(date, '%U') AS WK, visitId, date AS SALES_DATE, hits.eventInfo.eventLabel AS SEARCH_DD, year(date) as yr, MIN(hits.time) AS t FROM (TABLE_DATE_RANGE([67977396.ga_sessions_], TIMESTAMP('2015-03-04'), TIMESTAMP('2015-03-04'))) WHERE hits.eventInfo.eventAction='Depart date' AND hits.eventInfo.eventCategory='Book a train' GROUP BY 1, 2, 3, 4, 5 ORDER BY visitId
我得到了这个输出:
问题是,正如你在前两个记录中看到的那样,我仍然有两行用于同一个visitId。这是因为查询仅适用于相同的search_dd。我需要花费每次visitId的最短时间而不需要查看search_dd。
有什么建议吗?
提前致谢!
答案 0 :(得分:3)
这比你更容易。注意文档。
hits.time =访问此命中后的visitStartTime之后的毫秒数。 第一次点击的点击次数为0
所以你只需要查询hits.time=0
,
否则要获得WORM(仅附加)技术中的第一个或最后一个记录,您需要使用以下内容:
这将返回每个visitId的最后一条记录。
SELECT *
FROM
(SELECT visitId,hits.time,
row_number() over (partition BY visitId
ORDER BY hits.time desc) seqnum
FROM [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910]
)
WHERE seqnum=1
limit 100
您可以使用seqnum = N。
选择具有第N个值另请注意,对于完全唯一的访问ID,您应该使用fullVisitorId和visitId的组合。您在cookbook
中有更多信息答案 1 :(得分:0)
要获得更简洁的解决方案,您可以:
select *
from [google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910]
where true
qualify row_number() over (partition BY visitId ORDER BY hits.time desc) = 1