簡體   English   中英

如何從 BigQuery 中每一行的上一行和下一行獲取一個值?

[英]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_DateEnd_Date並按ID分組,當Start_DateTimestamp的日期並且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.

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