[英]Bigquery standard SQL: Filter out the duplicates while keeping the sequence of one column
我正在 BigQuery 中編寫查詢,試圖導出 session 訪問的不同頁面,按照頁面訪問時間(PageVisit_time)的順序(升序),以下是我寫的內容和輸出:
SELECT DISTINCT
fullVisitorId||'.'||visitStartTime||'.'||visitNumber AS session_id,
page.pagePath,
MIN(DATETIME_ADD(DATETIME(TIMESTAMP_SECONDS(visitStartTime),"America/New_York"), INTERVAL hits.time MILLISECOND)) AS PageVisit_time
from `xx.xx.ga_sessions_*`,
UNNEST(hits) AS hits
WHERE hits.type = "PAGE"
and date = '20220403'
group by 1,2
order by 1, 3 desc
上述查詢的輸出:
session_id | 頁面路徑 | PageVisit_time |
---|---|---|
123 | /觀點 | 2022-04-03T11:26:13.719000 |
123 | /觀點 | 2022-04-03T11:27:15.653820 |
123 | /點廣告 | 2022-04-03T11:34:10.000000 |
123 | /point-ad-next | 2022-04-03T12:38:15.82340 |
123 | /觀點 | 2022-04-03T12:50:18.123820 |
我想在最終的 output 中只保留不同的 session_id 和 pagePath,並且我還想讓 suer pagePath 列表遵循相同的順序(按 PageVisit_time 升序),關於如何使其工作的任何建議?
理想output:
session_id | 頁面路徑 |
---|---|
123 | /觀點 |
123 | /點廣告 |
123 | /point-ad-next |
如果我沒記錯的話,您想獲取 session 中每個 pagePath 的第一行,以及這些事件的其他屬性。
如果我是正確的,您可以使用 array_agg function 來獲得您想要的第一行。 我在這里簡化了查詢,因此您可以根據需要對其進行修改。
SELECT
fullVisitorId||'.'||visitStartTime||'.'||visitNumber AS session_id,
page.pagePath,
array_agg(struct(
visitStartTime,
attribute1,
attribute2,
attribute
) order by visitStartTime limit 1) as attr
from `xx.xx.ga_sessions_*`,
UNNEST(hits) AS hits
WHERE hits.type = "PAGE"
and date = '20220403'
group by 1,2
order by session_id, attr.visitStartTime
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.