es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo contar el número de entradas por mes.

Tengo una tabla de transacciones con datos de 3 meses:

consulta:

SELECT a.branch,
       a.dt_acc,
       a.ct_id,
       TRUNC(a.date, 'MONTH'),
       COUNT(*) a_count
  FROM a_transactions a
 WHERE a.v_date BETWEEN '01.03.2019' and '31.05.2019'
 GROUP BY a.branch, a.dt_acc, a.ct_id, TRUNC(a.date, 'MONTH');

resultado:

BRANCH ACC ID TRUNC(A.DATE,’MONTH’) A_COUNT
1 3 154 01.03.2019 1
1 3 154 01.04.2019 1
1 3 154 01.05.2019 1

Para cada mes, se imprime un registro de a_count.
Necesito que a_count cuente la cantidad de meses anteriores, es decir, si en marzo a_count fue igual a 1, en abril también existe un registro, a_count debería ser 2, y si también hay un registro en mayo, entonces a_count debería ser 3.

Necesito este resultado:

BRANCH ACC ID TRUNC(A.DATE,’MONTH’) A_COUNT
1 3 154 01.03.2019 1
1 3 154 01.04.2019 2
1 3 154 01.05.2019 3
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr este resultado, podemos usar una subconsulta para contar el número de registros para cada mes hasta y incluyendo el mes actual y luego unir la tabla resultante con la tabla original para obtener la salida deseada.

    Aquí está la consulta modificada:

    SELECT a.branch,
           a.dt_acc,
           a.ct_id,
           TRUNC(a.date, 'MONTH'),
           COUNT(*) + COALESCE(b.a_count,0) a_count
      FROM a_transactions a
      LEFT JOIN (SELECT branch, dt_acc, ct_id, TRUNC(date, 'MONTH') month, COUNT(*) a_count
                   FROM a_transactions
                  WHERE v_date BETWEEN '01.03.2019' and '31.05.2019'
                  GROUP BY branch, dt_acc, ct_id, TRUNC(date, 'MONTH')
                ) b
        ON a.branch = b.branch
       AND a.dt_acc = b.dt_acc
       AND a.ct_id = b.ct_id
       AND TRUNC(a.date, 'MONTH') >= b.month
     WHERE a.v_date BETWEEN '01.03.2019' and '31.05.2019'
     GROUP BY a.branch, a.dt_acc, a.ct_id, TRUNC(a.date, 'MONTH'), b.a_count;
    

    Explicación:
    – La subconsulta cuenta el número de registros para cada sucursal, cuenta y ID hasta e incluyendo cada mes.
    – La consulta externa une la subconsulta con la tabla original utilizando la sucursal, cuenta, ID y mes como condiciones de unión, y luego suma el recuento de la subconsulta (si existe) al recuento de la tabla original.
    – También utilizamos COALESCE para manejar el caso en el que no hay registros previos para un mes dado, en cuyo caso el recuento de la subconsulta sería nulo.

    La salida resultante mostrará el recuento acumulado de registros para cada sucursal, cuenta e ID hasta el mes actual.

Comments are closed.