Count number of rows before and after a particular row in BigQuery?
I have a table containing date and events. There is event named 'A'. I want to find out how many events occurred before and after event 'A' in Sql Bigquery. for Example,
User Date Events 123 2018-02-13 D 123 2018-02-12 B 123 2018-02-10 C 123 2018-02-11 A 123 2018-02-01 X
The answer would be something like this.
User Event Before After 123 A 2 2
I have tried many queries but its not working. Any Idea, how to solve this problem?Accepted_Answer:
below is for BigQuery Standard SQL
#standardSQL WITH `project.dataset.events` AS ( SELECT 123 user, '2018-02-13' dt, 'D' event UNION ALL SELECT 123, '2018-02-12', 'B' UNION ALL SELECT 123, '2018-02-11', 'A' UNION ALL SELECT 123, '2018-02-10', 'C' UNION ALL SELECT 123, '2018-02-01', 'X' ) SELECT user, event, before, after FROM ( SELECT user, event, COUNT(1) OVER(PARTITION BY user ORDER BY dt ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) before, COUNT(1) OVER(PARTITION BY user ORDER BY dt ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) after FROM `project.dataset.events` ) WHERE event = 'A'
Read great educational content like this and a lot more !
Members get free exclusive access to content, new courses, and discounts. Signup for a free account to write a post / comment / upvote posts. Creating an account takes less than 5 seconds and you can start earning badges & points too