add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
CREATE TABLE test_fill_null ( -- 1st case
date int -- unfortunate column names
, value int
);

INSERT INTO test_fill_null VALUES
(1,2)
, (2, NULL)
, (3, 45)
, (4,NULL)
, (5, null)
;

CREATE TABLE table0 ( -- 2nd case
id1 int
, id2 int
, tms timestamptz
);

INSERT INTO table0 VALUES
(1,2, '2015-12-16 16:09:00+01')
, (1,3, '2015-12-16 16:11:00+01')
, (2,4, '2015-12-16 16:10:00+01')
, (2,5, '2015-12-16 16:12:00+01')
, (1,6, '2015-12-16 16:13:01+01')
, (2,7, '2015-12-16 16:52:00+01') -- new group after gap
, (2,8, '2015-12-16 16:54:00+01')
;
CREATE TABLE
INSERT 0 5
CREATE TABLE
INSERT 0 7
-- 1st case
SELECT date, max(value) OVER (PARTITION BY grp) AS value
FROM (
SELECT *, count(value) OVER (ORDER BY date) AS grp
FROM test_fill_null
) sub;
date value
1 2
2 2
3 45
4 45
5 45
SELECT 5
-- 2nd case
SELECT id1, id2, tms
, count(step) OVER (ORDER BY id1, id2, tms) AS group_id
FROM (
SELECT *, lag(tms, 1, '-infinity') OVER (PARTITION BY id1 ORDER BY id2, tms) < tms - interval '5 min' AS step
FROM table0
) sub
ORDER BY id1, id2, tms;
id1 id2 tms group_id
1 2 2015-12-16 15:09:00+00 1
1 3 2015-12-16 15:11:00+00 2
1 6 2015-12-16 15:13:01+00 3
2 4 2015-12-16 15:10:00+00 4
2 5 2015-12-16 15:12:00+00 5
2 7 2015-12-16 15:52:00+00 6
2 8 2015-12-16 15:54:00+00 7
SELECT 7
-- Remi
WITH second_case AS (
SELECT id1, id2, tms
, CASE WHEN lag(tms, 1, '-infinity') OVER (partition by id1 ORDER BY id2, tms) < tms - interval '5 min' THEN id2 END AS group_id
FROM table0
)
SELECT id1, id2, tms
, count(group_id) OVER (ORDER BY id1, id2, tms) AS group_id
FROM second_case
ORDER BY id1, id2, tms;
id1 id2 tms group_id
1 2 2015-12-16 15:09:00+00 1
1 3 2015-12-16 15:11:00+00 1
1 6 2015-12-16 15:13:01+00 1
2 4 2015-12-16 15:10:00+00 2
2 5 2015-12-16 15:12:00+00 2
2 7 2015-12-16 15:52:00+00 3
2 8 2015-12-16 15:54:00+00 3
SELECT 7