Tabla de contenidos
Las funciones agregadas temporales generalizan las funciones agregadas tradicionales. Su semántica es que calculan el valor de la función en cada instante de la unión de las extensiones temporales de los valores a agregar. En contraste, recuerde que todas las otras funciones que manipulan tipos temporales calculan el valor de la función en cada instante de la intersección de las extensiones temporales de los argumentos.
Las funciones agregadas temporales son las siguientes:
Para todos los tipos temporales, la función tCount
generaliza la función traditional count
. El conteo temporal se puede utilizar para calcular en cada momento el número de objetos disponibles (por ejemplo, el número de coches en un área).
Para todos los tipos temporales, la función extent
devuelve un cuadro delimitador que engloba un conjunto de valores temporales. Dependiendo del tipo de base, el resultado de esta función puede ser un tstzspan
, un tbox
o un stbox
.
Para el tipo booleano temporal, las funciones tAnd
y tOr
generalizan las funciones traditionales and
y or
.
Para los tipos numéricos temporales hay dos tipos de funciones agregadas temporales. Las funciones tmin
, tMax
, tSum
y tAvg
generalizan las funciones traditionales min
, max
, sum
y avg
. Además, las funciones wMin
, wMax
, wCount
, wSum
y wAvg
son versiones de ventana (o acumulativas) de las funciones tradicionales que, dado un intervalo de tiempo w, calculan el valor de la función en un instante t considerando los valores durante el intervalo [t-w, t]. Todas las funciones agregadas de ventana están disponibles para enteros temporales, mientras que para flotantes temporales sólo son significativos el mínimo y el máximo de ventana.
Para el tipo texto temporal, las funciones tMin
y tMax
generalizan las funciones traditionales min
y max
.
Finalmente, para puntos temporales, la función tCentroid
generaliza la función ST_Centroid
proporcionada por PostGIS. Por ejemplo, dado un conjunto de objetos que se mueven juntos (es decir, un convoy o una bandada), el centroide temporal producirá un punto temporal que representa en cada instante el centro geométrico (o el centro de masa) de todos los objetos en movimiento.
En los ejemplos que siguen, suponemos que las tablas Department
y Trip
contienen las dos tuplas introducidas en la “Ejemplos de tipos temporales”.
Conteo temporal
tCount(ttype) → {tintSeq,tintSeqSet}
SELECT tCount(NoEmps) FROM Department; -- {[1@2001-01-01, 2@2001-02-01, 1@2001-08-01, 1@2001-10-01)}
Extensión del cuadro delimitador
extent(temp) → {tstzspan,tbox,stbox}
SELECT extent(noEmps) FROM Department; -- TBOX XT((4,12),[2001-01-01,2001-10-01]) SELECT extent(Trip) FROM Trips; -- STBOX XT(((0,0),(3,3),[2001-01-01 08:00:00+01, 2001-01-01 08:20:00+01)))
Y temporal
tAnd(tbool) → tbool
SELECT tAnd(NoEmps #> 6) FROM Department; -- {[t@2001-01-01, f@2001-04-01, f@2001-10-01)}
O temporal
tOr(tbool) → tbool
SELECT tOr(NoEmps #> 6) FROM Department; -- {[t@2001-01-01, f@2001-08-01, f@2001-10-01)}
Mínimo temporal
tMin(ttype) → ttype
SELECT tMin(NoEmps) FROM Department; -- {[10@2001-01-01, 4@2001-02-01, 6@2001-06-01, 6@2001-10-01)}
Máximo temporal
tMax(ttype) → ttype
SELECT tMax(NoEmps) FROM Department; -- {[10@2001-01-01, 12@2001-04-01, 6@2001-08-01, 6@2001-10-01)}
Suma temporal
tSum(tnumber) → {tnumberSeq,tnumberSeqSet}
SELECT tSum(NoEmps) FROM Department; /* {[10@2001-01-01, 14@2001-02-01, 16@2001-04-01, 18@2001-06-01, 6@2001-08-01, 6@2001-10-01)} */
Promedio temporal
tAvg(tnumber) → {tfloatSeq,tfloatSeqSet}
SELECT tAvg(NoEmps) FROM Department; /* {[10@2001-01-01, 10@2001-02-01), [7@2001-02-01, 7@2001-04-01), [8@2001-04-01, 8@2001-06-01), [9@2001-06-01, 9@2001-08-01), [6@2001-08-01, 6@2001-10-01) */
Mínimo de ventana
wMin(tnumber,interval) → {tnumberSeq,tnumberSeqSet}
SELECT wMin(NoEmps, interval '2 days') FROM Department; -- {[10@2001-01-01, 4@2001-04-01, 6@2001-06-03, 6@2001-10-03)}
Máximo de ventana
wMax(tnumber,interval) → {tnumberSeq,tnumberSeqSet}
SELECT wMax(NoEmps, interval '2 days') FROM Department; -- {[10@2001-01-01, 12@2001-04-01, 6@2001-08-03, 6@2001-10-03)}
Conteo de ventana
wCount(tnumber,interval) → {tintSeq,tintSeqSet}
SELECT wCount(NoEmps, interval '2 days') FROM Department; /* {[1@2001-01-01, 2@2001-02-01, 3@2001-04-01, 2@2001-04-03, 3@2001-06-01, 2@2001-06-03, 1@2001-08-03, 1@2001-10-03)} */
Suma de ventana
wSum(tint,interval) → {tintSeq,tintSeqSet}
SELECT wSum(NoEmps, interval '2 days') FROM Department; /* {[10@2001-01-01, 14@2001-02-01, 26@2001-04-01, 16@2001-04-03, 22@2001-06-01, 18@2001-06-03, 6@2001-08-03, 6@2001-10-03)} */
Promedio de ventana
wAvg(tint,interval) → {tfloatDiscSeq,tfloatSeqSet}
SELECT wAvg(NoEmps, interval '2 days') FROM Department; /* {[10@2001-01-01, 10@2001-02-01), [7@2001-02-01, 7@2001-04-01), [8.66666666666667@2001-04-01, 8.66666666666667@2001-04-03), [8@2001-04-03, 8@2001-06-01), [7.33333333333333@2001-06-01, 7.33333333333333@2001-06-03), [9@2001-06-03, 9@2001-08-03), [6@2001-08-03, 6@2001-10-03)} */
Centroide temporal
tCentroid(tgeompoint) → tgeompoint
SELECT tCentroid(Trip) FROM Trips; /* {[POINT(0 0)@2001-01-01 08:00:00+00, POINT(1 0)@2001-01-01 08:05:00+00), [POINT(0.5 0)@2001-01-01 08:05:00+00, POINT(1.5 0.5)@2001-01-01 08:10:00+00, POINT(2 1.5)@2001-01-01 08:15:00+00), [POINT(2 2)@2001-01-01 08:15:00+00, POINT(3 3)@2001-01-01 08:20:00+00)} */