1
連續週期考慮這個模式的大量查詢表的:組值通過在大量查詢
+---------------------------------------+
|ServiceId |UserId |Date |
+---------------------------------------+
|s1 |u1 |2016|09|01 00:00:00 |
|s1 |u1 |2016|09|02 00:00:00 |
|s1 |u2 |2016|09|02 12:00:00 |
|s1 |u2 |2016|09|05 00:00:00 |
|s1 |u1 |2016|09|10 12:00:00 |
|s2 |u1 |2016|09|06 00:00:00 |
|s2 |u2 |2016|09|10 00:00:00 |
|s2 |u2 |2016|09|10 12:00:00 |
|s2 |u2 |2016|09|11 12:00:00 |
+---------------------------------------+
它示出了由所識別的用戶的系統的某些資源的使用。它就像活動日誌一樣工作。
我需要一個查詢,允許我隨着時間的推移檢索資源的連續使用情況。由於該表不包含「開始」和「結束」日期,因此該結尾被認爲是該期間最後一次記錄的日期。
如果兩個日期距離彼此最多24小時,則視爲連續。
這是這樣的查詢的預期輸出與給定的表:
+-------------------------------------------------------------+
|ServiceId |UserId |StartDate |EndDate |
+-------------------------------------------------------------+
|s1 |u1 |2016|09|01 00:00:00 |2016|09|02 00:00:00 |
|s1 |u2 |2016|09|02 12:00:00 |2016|09|02 12:00:00 |
|s1 |u2 |2016|09|05 00:00:00 |2016|09|05 00:00:00 |
|s1 |u1 |2016|09|10 12:00:00 |2016|09|10 12:00:00 |
|s2 |u1 |2016|09|06 00:00:00 |2016|09|06 00:00:00 |
|s2 |u2 |2016|09|10 00:00:00 |2016|09|11 12:00:00 |
+-------------------------------------------------------------+
換句話說:我需要由用戶識別的服務的連續使用時間段。
BigQuery上窗口函數的文檔(here和here)沒有這種用例的清晰示例(事實上,它們沒有日期示例)。
如何使用BigQuery做到這一點?
謝謝。
我試了一下,它的一些調整工作:'prev_date'應該包含一個'USEC_TO_TIMESTAMP'函數(由於'lag函數和時間戳的bug,更多信息[here](https:// code.google.com/p/google-bigquery/issues/detail?id=204)),並且應該切換比較內的數字('then 1 else 0')。 –
標準SQL沒有這個問題,如果有幫助的話。 https://cloud.google.com/bigquery/sql-reference/ –