簡體   English   中英

Bigquery 標准 SQL:過濾掉重復項,同時保持一列的順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM