[英]How to get a value from previous and next row for each row in BigQuery?
我在 BigQuery 中有一個表,其中包含以下字段(以及許多其他字段,但不相關):
ID
Timestamp
例如:
ID | 時間戳 |
---|---|
1 | 2021-04-26 14:57:24.292 UTC |
4 | 2019-09-23 19:07:45.002 UTC |
1 | 2020-05-12 04:34:27.475 UTC |
5 | 2021-03-19 14:57:24.292 UTC |
4 | 2020-12-21 16:53:24.292 UTC |
1 | 2019-02-24 13:27:56.924 UTC |
我想獲取每行的Start_Date
和End_Date
並按ID
分組,當Start_Date
是Timestamp
的日期並且End_Date
是下一行的Timestamp
的日期時,它按ID
分組並按Timestamp
排序。
例如:
ID | 開始日期 | 結束日期 |
---|---|---|
1 | 2021-04-26 | NULL |
4 | 2019-09-23 | 2020-12-21 |
1 | 2020-05-12 | 2021-04-26 |
5 | 2021-03-19 | NULL |
4 | 2020-12-21 | NULL |
1 | 2019-02-24 | 2020-05-12 |
或以有序的方式:
ID | 開始日期 | 結束日期 |
---|---|---|
1 | 2019-02-24 | 2020-05-12 |
1 | 2020-05-12 | 2021-04-26 |
1 | 2021-04-26 | NULL |
4 | 2019-09-23 | 2020-12-21 |
4 | 2020-12-21 | NULL |
5 | 2021-03-19 | NULL |
如何在 StandardSQL 中做到這一點?
使用lead()
:
select t.*,
date(timestamp) as start_date,
date(lead(timestamp) over (partition by id order by timestamp)) as end_date
from t;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.