BigQuery特定列的第一条记录

时间:2015-03-06 09:34:11

标签: google-bigquery

这是我的输出样本:

enter image description here

我需要为每次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

我得到了这个输出:

enter image description here

问题是,正如你在前两个记录中看到的那样,我仍然有两行用于同一个visitId。这是因为查询仅适用于相同的search_dd。我需要花费每次visitId的最短时间而不需要查看search_dd。

有什么建议吗?

提前致谢!

2 个答案:

答案 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