Capítulo 10. Tipos temporales: Agregación e indexación

Tabla de contenidos

Agregación
Indexación
Estadísticas y selectividad
Colecta de estadísticas
Estimación de la selectividad

Agregación

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)} */