, , ,
, . ,
0 - 10 1,
5. , .
, , -
,
.
, , ,
,
. :
SELECT int4range(rstart, rstart+1) AS srange
FROM generate_series(0,10,1) AS seq(rstart)
0 10
1. :
srange
[0,1)
[1,2)
[2,3)
[3,4)
[4,5)
[5,6)
[6,7)
[7,8)
[8,9)
[9,10)
[10,11)
(11 rows)
, && ( ).
.
:
SELECT lower(srange) AS t,
sum (CASE
WHEN drange <@ srange THEN value
ELSE CAST (value AS DOUBLE PRECISION) * (upper(drange*srange) - lower(drange*srange)) / (upper(drange)-lower(drange))
END) AS value
FROM (
SELECT int4range(rstart, rstart+1) AS srange FROM generate_series(0,10,1) AS seq(rstart)
) AS s
LEFT JOIN (
SELECT int4range(coalesce(lag(ts) OVER (order by ts), 0), ts) AS drange, value FROM data
) AS d ON srange && drange
GROUP BY lower(srange)
ORDER BY lower(srange)
:
t | value
----+------------------
0 | 5
1 | 2
2 | 3.33333333333333
3 | 3.33333333333333
4 | 3.33333333333333
5 |
6 |
7 |
8 |
9 |
10 |
(11 rows)
, - ts , ,
, .
, .
,
, ,
.
, , , .
.
Caveat Emptor: , , .
- .