我有一個這樣的 BigQuery 表
ID | 開始日期 | 結束日期 | 地點 | 型別 |
---|---|---|---|---|
1 | 2022-01-01 | 2022-01-01 | 莫 | 移動的 |
1 | 2022-01-01 | 2022-01-02 | 莫 | 移動的 |
2 | 2022-01-02 | 2022-01-03 | AZ | 筆記本電腦 |
3 | 2022-01-03 | 2022-01-03 | AZ | 移動的 |
3 | 2022-01-03 | 2022-01-03 | AZ | 移動的 |
3 | 2022-01-03 | 2022-01-03 | AZ | 移動的 |
2 | 2022-01-02 | 2022-01-03 | 加州 | 筆記本電腦 |
4 | 2022-01-02 | 2022-01-03 | 加州 | 移動的 |
5 | 2022-01-02 | 2022-01-03 | 加州 | 筆記本電腦 |
我想按任意日期范圍的位置和型別回傳唯一 ID 的數量。
我遇到的問題是有多個重復行覆寫相似的日期,比如上面的前兩行。
例如,日期范圍 2022-01-02 和 2022-01-03 將回傳
地點 | 型別 | 計算不同的 ID |
---|---|---|
AZ | 筆記本電腦 | 1 |
AZ | 移動的 | 1 |
加州 | 筆記本電腦 | 2 |
加州 | 移動的 | 1 |
莫 | 移動的 | 1 |
我首先嘗試在 like 創建日期串列
WITH dates AS (SELECT * FROM UNNEST(GENERATE_DATE_ARRAY(DATE_TRUNC(DATE_SUB(CURRENT_DATE('Europe/London'), INTERVAL 3 MONTH),MONTH), DATE_SUB(CURRENT_DATE('Europe/London'), INTERVAL 1 DAY), INTERVAL 1 DAY)) AS cal_date)
并使用ROW_NUMBER() OVER (PARTITION BY id,start_date,end_date)
僅公開唯一行。
但我只能回傳每天唯一 ID 的數量,而不是查看整個日期范圍。
然后我嘗試加入同一個 cte 為每個日期回傳一個唯一的行,所以像
日期 | 編號 | 開始日期 | 結束日期 | 位置 | 型別
上面第一個表中的列對于每個日期都是重復的,但這需要生成大量行才能進一步使用。
達到預期結果的正確方法是什么?
uj5u.com熱心網友回復:
我認為最簡單的方法是
select location, type, count(distinct id) distinct_ids
from your_table, unnest(generate_date_array(start_date, end_date)) effective_date
where effective_date between '2022-01-02' and '2022-01-03'
group by location, type
帶輸出(如果應用于您問題中的樣本資料)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/492351.html
下一篇:如何合并此查詢以使其僅回傳一列?