[英]selecting current and previous value from consecutive rows
我有一个结果集,需要从中提取输出。 结果集如下:
+----------+-------------+----------------+-----------+
| Issue_id | create_date | transtimestamp | Npriority |
+----------+-------------+----------------+-----------+
| 556365 | 2020-02-02 | 1580628330 | 2 |
| 556365 | 2020-02-02 | 1580629317 | 0 |
| 773656 | 2020-02-02 | 1580608104 | 1 |
| 773656 | 2020-02-02 | 1580609625 | 0 |
| 111252 | 2020-02-02 | 1580622323 | 1 |
| 111252 | 2020-02-02 | 1580623399 | 2 |
+----------+-------------+----------------+-----------+
我想从上面生成一个输出:
+----------+-------------+------------+-----------+
| Issue_id | create_date | prev_value | cur_value |
+----------+-------------+------------+-----------+
| 556365 | 2020-02-02 | 2 | 0 |
| 773656 | 2020-02-02 | 1 | 0 |
| 111252 | 2020-02-02 | 1 | 2 |
+----------+-------------+------------+-----------+
我正在使用以下内容,但无法获得所需的结果集:
select Issue_id,Npriority,lag(Npriority) over (partition by Issue_id order by trantimestamp) as prev_value FROM (select * from results)
BigQuery 可以通过聚合来做到这一点:
select Issue_id, create_date,
array_agg(Npriority order by transtimestamp desc limit 1)[ordinal(1)] as latest_value,
array_agg(Npriority order by transtimestamp desc limit 2)[ordinal(2)] as prev_value
from results r
group by Issue_id create_date;
你可以做一个简单的自连接
select a.Issue_id, a.create_date, b.cur_value as prev_value, a.cur_value
from results a inner join results b on a.Issue_id = b.Issue_id
and a.transtimestamp > b.transtimestamp
你走在正确的轨道上。
with data as (
select
*
, lag(Npriority,1) over (partition by Issue_id order by transtimestamp asc) as prev_Npriority -- Get previous
, row_number() over (partition by Issue_id order by transtimestamp desc) as rn -- order by most recent
from `project.dataset.table`
)
select Issue_id, create_date, prev_Npriority as prev_value, Npriority as cur_value
from data
where rn = 1 -- filter to most recent
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.