I want to concatenate the surrounding rows(in the following examples only the surrounding 2 rows) after ranking to a new column(group by
seems to not work), and here is the data I have:
Schema (MySQL v8.0)
CREATE TABLE log_table (
`user_id` VARCHAR(5),
`date_time` DATETIME,
`event_name` VARCHAR(10),
`trivial` int
);
INSERT INTO log_table
(`user_id`, `date_time`, `event_name`, `trivial`)
VALUES
('001', '2020-12-10 10:00:02', 'c', 3),
('001', '2020-12-10 10:00:01', 'b', 9),
('001', '2020-12-10 10:00:40', 'e', 2),
('001', '2020-12-10 10:00:20', 'd', 6),
('001', '2020-12-10 10:00:00', 'a', 1),
('002', '2020-12-10 10:00:10', 'C', 9),
('002', '2020-12-10 10:00:50', 'D', 0),
('002', '2020-12-10 10:00:02', 'A', 2),
('002', '2020-12-10 10:00:09', 'B', 4);
To illustrate what I want to do. I can do summing over numerical values using the sum
clause as follows:
Query #1
SELECT
*, SUM(trivial) over(partition by user_id order by user_id, date_time rows between 2 preceding and 2 following) AS trivial_new
FROM
log_table;
user_id |
date_time |
event_name |
trivial |
trivial_new |
001 |
2020-12-10 10:00:00 |
a |
1 |
13 |
001 |
2020-12-10 10:00:01 |
b |
9 |
19 |
001 |
2020-12-10 10:00:02 |
c |
3 |
21 |
001 |
2020-12-10 10:00:20 |
d |
6 |
20 |
001 |
2020-12-10 10:00:40 |
e |
2 |
11 |
002 |
2020-12-10 10:00:02 |
A |
2 |
15 |
002 |
2020-12-10 10:00:09 |
B |
4 |
15 |
002 |
2020-12-10 10:00:10 |
C |
9 |
15 |
002 |
2020-12-10 10:00:50 |
D |
0 |
13 |