У меня есть эта таблица:
prod | customer | city | num | time | isextra
-----+----------+---------+------+--------------------+-------
1 | Jim | Venice | 5 |2015-08-27 1:10:00 | 0
1 | Jim | Venice | 5 |2015-08-27 1:10:15 | 0
1 | Jim | Venice | 5 |2015-08-27 1:10:28 | 0
4 | Jane | Vienna | 8 |2018-06-04 2:20:43 | 0
4 | Jane | Vienna | 8 |2018-06-04 2:20:43 | 0
4 | Jane | Vienna | 8 |2018-06-04 2:20:49 | 0
4 | Jane | Vienna | 8 |2018-06-04 2:30:55 | 0
7 | Jack | Vilnius | 4 |2015-09-15 2:20:55 | 0
7 | Jake | Vigo | 9 |2018-01-01 10:20:05 | 0
7 | Jake | Vigo | 2 |2018-01-01 10:20:25 | 0
Теперь возьмем все строки, которые похожи по prod, customer, city, num, а затем по любой строке, время которой находится в пределах 30 секунд от первой в группе,его поле 'isextra' ОБНОВЛЕНО до 1, и это будет результат:
prod | customer | city | num | time | isextra
-----+----------+---------+------+--------------------+-------
1 | Jim | Venice | 5 |2015-08-27 1:10:00 | 0
1 | Jim | Venice | 5 |2015-08-27 1:10:15 | 1
1 | Jim | Venice | 5 |2015-08-27 1:10:28 | 1
4 | Jane | Vienna | 8 |2018-06-04 2:20:43 | 0
4 | Jane | Vienna | 8 |2018-06-04 2:20:43 | 1
4 | Jane | Vienna | 8 |2018-06-04 2:20:49 | 1
4 | Jane | Vienna | 8 |2018-06-04 2:30:55 | 0
7 | Jack | Vilnius | 4 |2015-09-15 2:20:55 | 0
7 | Jake | Vigo | 9 |2018-01-01 10:20:05 | 0
7 | Jake | Vigo | 2 |2018-01-01 10:20:25 | 0
Вот таблица и данные:
create table mytable (prod int, customer varchar, city varchar, num int, time timestamp, isextra smallint);
insert into mytable values (1, 'Jim', 'Venice', 5, '2015-08-27 1:10:00', 0);
insert into mytable values (1, 'Jim', 'Venice', 5, '2015-08-27 1:10:15', 0);
insert into mytable values (1, 'Jim', 'Venice', 5, '2015-08-27 1:10:28', 0);
insert into mytable values (4, 'Jane', 'Vienna', 8, '2018-06-04 2:20:43', 0);
insert into mytable values (4, 'Jane', 'Vienna', 8, '2018-06-04 2:20:43', 0);
insert into mytable values (4, 'Jane', 'Vienna', 8, '2018-06-04 2:20:49', 0);
insert into mytable values (4, 'Jane', 'Vienna', 8, '2018-06-04 2:30:55', 0);
insert into mytable values (7, 'Jack', 'Vilnius', 4, '2015-09-15 2:20:55', 0);
insert into mytable values (7, 'Jake', 'Vigo', 9, '2018-01-01 10:20:05', 0);
insert into mytable values (7, 'Jake', 'Vigo', 2, '2018-01-01 10:20:25', 0);
Все, что у меня есть, это:1010 *
UPDATE mytable
SET isextra = 1
FROM (
select *,
row_number() over (partition by prod, customer, city, num order by time asc)
as t from mytable
) AS sequence
Застрял здесь ...
Любые идеи приветствуются, спасибо!