Etiqueta: sql

  • Tengo una tabla como la siguiente:

    datetime               points
    2021-07-05 10:00:00    1
    2021-07-05 10:05:00    1
    2021-07-05 10:08:00    -1
    2021-07-05 10:10:00    1
    2021-07-05 10:11:00    -1

    Y quiero sacar las sumas acumulativas. Es decir, no quiero sacar simplemente un SUM(points) y que me devuelva 1, sino que quiero ir viendo, para cada fila, la suma parcial de todas las filas que hay hasta llegar a esa desde el principio.

    Por lo que veo en Stack Overflow, una forma universal de hacerlo aunque poco eficiente con tablas muy grandes, es utilizar INNER JOINs aplicados sobre la misma tabla que parcialmente vayan agrupando los resultados por fecha. Me hice algo como lo siguiente en mi caso usando un WITH para filtrar sólo aquellos resultados que realmente quiero sumar y así tratar de hacerlo más eficiente.

    WITH points AS (
      SELECT datetime, points
        FROM data
       WHERE target_id = 12345
    )
    SELECT a.datetime, a.points, SUM(b.points)
      FROM points a
           INNER JOIN points b
                   ON b.datetime <= a.datetime;
  • Leyendo el gigante manual de PostgreSQL, por supuesto que existen operadores para hacer un SELECT de campos de un JSON volcado en un campo de este tipo.

    El operador ->> permite extraer el contenido de un campo si se pone entre comillas simples su ruta a su derecha, o de un array si se pone su índice como un número.

    SELECT details->>'date' FROM invoices;