Muestrear un valor temporal con respecto a un intervalo
tsample({tnumber,tgeompoint},duration interval,torigin timestamptz='2000-01-03') →
{tnumber,tgeompoint}
Si el origen no se especifica, su valor se establece por defecto en lunes 3 de enero de 2000. El intervalo dado debe ser estrictamente mayor que cero. Nótese que el resultado es un instante temporal o una secuencia temporal con interpolación discreta.
SELECT tsample(tint '{1@2001-01-01,5@2001-01-05}', '3 days', '2001-01-01'); -- {1@2001-01-01} SELECT tsample(tfloat '[1@2001-01-01,5@2001-01-05]', '1 day', '2001-01-01'); -- {1@2001-01-01, 2@2001-01-02, 3@2001-01-03, 4@2001-01-04, 5@2001-01-05} SELECT tsample(tfloat '[1@2001-01-01,5@2001-01-05]', '3 days', '2001-01-01'); -- {1@2001-01-01, 4@2001-01-04}
SELECT asText(tsample(tgeompoint '[Point(1 1)@2001-01-01, Point(5 5)@2001-01-05]', '2 days', '2001-01-01')); -- {POINT(1 1)@2001-01-01, POINT(3 3)@2001-01-03, POINT(5 5)@2001-01-05} SELECT asText(tsample(tgeompoint '{[Point(1 1)@2001-01-01, Point(5 5)@2001-01-05], [Point(1 1)@2001-01-06, Point(5 5)@2001-01-08]}', '3 days', '2001-01-01')); -- {POINT(1 1)@2001-01-01, POINT(4 4)@2001-01-04, POINT(3 3)@2001-01-07}
La Figura 9.2, “Muestreo de flotantes temporales con interpolación discreta, escalonada y lineal.” ilustra el muestreo para números flotantes temporales con varias interpolaciones. Como ilustra la figura, la operación de muestreo es más adecuada para valores temporales con interpolación continua.
Reducir la precisión temporal de un valor temporal con respecto a un intervalo calculando el promedio/centroide ponderado por el tiempo en cada intervalo de tiempo
tprecision({tnumber,tgeompoint},duration interval,torigin timestamptz='2000-01-03')
→ {tnumber,tgeompoint}
Si el origen no se especifica, su valor se establece por defecto en lunes 3 de enero de 2000. El intervalo dado debe ser estrictamente mayor que cero.
SELECT tprecision(tint '[1@2001-01-01,5@2001-01-05,1@2001-01-09]','1 day', '2001-01-01'); -- Interp=Step;[1@2001-01-01, 5@2001-01-05, 1@2001-01-09] SELECT tprecision(tfloat '[1@2001-01-01,5@2001-01-05,1@2001-01-09)','1 day', '2001-01-01'); -- [1.5@2001-01-01, 4.5@2001-01-04, 4.5@2001-01-05, 1.5@2001-01-08] SELECT tprecision(tfloat '[1@2001-01-01,5@2001-01-05,1@2001-01-09]','1 day', '2001-01-01'); -- [1.5@2001-01-01, 4.5@2001-01-04, 4.5@2001-01-05, 1.5@2001-01-08, 1@2001-01-09] SELECT tprecision(tfloat '[1@2001-01-01,5@2001-01-05,1@2001-01-09)','2 days', '2001-01-01'); -- [2@2001-01-01, 4@2001-01-03, 4@2001-01-05, 2@2001-01-07]
SELECT asText(tprecision(tgeompoint '[Point(1 1)@2001-01-01, Point(5 5)@2001-01-05, Point(1 1)@2001-01-09)', '1 day', '2001-01-01')); /* [POINT(1.5 1.5)@2001-01-01, POINT(4.5 4.5)@2001-01-04, POINT(4.5 4.5)@2001-01-05, POINT(1.5 1.5)@2001-01-08] */ SELECT asText(tprecision(tgeompoint '[Point(1 1)@2001-01-01, Point(5 5)@2001-01-05, Point(1 1)@2001-01-09)', '2 days', '2001-01-01')); /* [POINT(2 2)@2001-01-01, POINT(4 4)@2001-01-03, POINT(4 4)@2001-01-05, POINT(2 2)@2001-01-07] */ SELECT asText(tprecision(tgeompoint '[Point(1 1)@2001-01-01, Point(5 5)@2001-01-05, Point(1 1)@2001-01-09)', '4 days', '2001-01-01')); -- [POINT(3 3)@2001-01-01, POINT(3 3)@2001-01-05]
Cambiar la precisión de un valor temporal es similar a cambiar su granularidad temporal, por ejemplo, de marcas de tiempo a horas o días, aunque la precisión se puede establecer en un intervalo arbitrario, como 2 horas y 15 minutos. La Figura 9.3, “Cambio de precisión de números flotantes temporales con interpolación discreta, escalonada y lineal.” ilustra un cambio de precisión temporal para números flotantes temporales con varias interpolaciones.
Figura 9.3. Cambio de precisión de números flotantes temporales con interpolación discreta, escalonada y lineal.