BigQuery 特定列的第一条记录

BigQuery first record of a specific column

这是我的输出示例:

我只需要获取每个 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。我需要在不查看 search_dd 的情况下为每个 visitId 花费最少的时间。

有什么建议吗?

提前致谢!

这比您做的要容易得多。注意文档。

hits.time = visitStartTime 之后注册此点击的毫秒数。 第一击的 hits.time 为 0

所以你只需要查询 hits.time=0,

否则要在 WORM(仅附加)技术中获取第一条或最后一条记录,您需要使用类似的东西:

这是每个 visitId 的 returns 最后记录。

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

中有更多信息

为了更简洁的解决方案,您可以这样做:

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