繁体   English   中英

从连续行中选择当前和上一个值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM