Suma acumulativa de Mysql agrupada por nombre y fecha
Tenía una tarea en la que debía acumular dos fechas diferentes, lo cual hice con la siguiente consulta:
with cte as (
select p.starteddate as CD,
(select count(*) from TABLE t1 where p.starteddate=t1.starteddate) Started,
(select count(*) from TABLE t1 where p.starteddate=t1.updateddate) Updated
from TABLE p
group by CD, Started, Updated
)
select
CD,
sum(Started) over (order by CD asc rows between unbounded preceding and current row) as Started,
sum(Updated) over (order by CD asc rows between unbounded preceding and current row) as Updated
from cte
order by CD desc;
Ahora, tengo que agregar más valores a esa consulta en la que me he quedado atascado.
1) La consulta debe tener en cuenta los nombres y acumular solo las fechas por cada nombre. Dado que hay alrededor de 11 nombres, supongo que la mejor opción sería recuperar los nombres primero con una consulta DISTINCT, pero no tengo idea de cómo seguir aquí.
2) Solo se debe tener en cuenta el Tipo A.
3) También, dado que hay 1000 filas y contando, y las fechas se remontan a un año, solo se deben tener en cuenta los últimos 60 días.
¡Gracias!
Tabla de ejemplo:
Type | Startdate | updateddate | name |
---|---|---|---|
A | 12/01/21 | 12/01/21 | D |
A | 11/01/21 | 12/01/21 | D |
A | 13/01/21 | 13/01/21 | E |
A | … | … | . |
A | 07/01/21 | 11/01/21 | E |
A | 12/01/21 | 14/01/21 | E |
A | … | … | . |
A | 14/01/21 | 14/01/21 | G |
A | 12/01/21 | 12/01/21 | D |
A | 11/01/21 | 12/01/21 | D |
A | 13/01/21 | 13/01/21 | E |
A | … | … | . |
A | 07/01/21 | 11/01/21 | E |
A | 12/01/21 | 14/01/21 | E |
A | 14/01/21 | null | G |
A | 11/01/21 | 11/01/21 | F |
A | 14/01/21 | 15/01/21 | G |
Resultado esperado:
Name | Date | Count Start | Count Updated |
---|---|---|---|
E | 07/01/21 | 2 | 0 |
E | 11/01/21 | 2 | 2 |
E | 12/01/21 | 4 | 2 |
E | 13/01/21 | 6 | 4 |
D | 11/01/21 | 2 | 0 |
D | 12/01/21 | 4 | 4 |
G | 14/01/21 | 3 | 1 |
G | 15/01/21 | 3 | 2 |
F | 11/01/21 | 1 | 1 |
davy.ai
Para lograr el resultado esperado, necesitas modificar la consulta actual para incorporar los requisitos adicionales. Así es como puedes modificar la consulta existente:
Desglosemos los cambios:
cte
), primero filtramos los registros solo paraTipo A
y dentro de los últimos60 días
. También reemplazamosstarteddate
pordate
para simplificar los nombres de las columnas.name
ydate
y calculamosstart_count
yupdate_count
para cada grupo. Utilizamos la funciónfilter
para contar solo los registros relevantes.partition by
para particionar porname
en lugar deCD
. Esto asegurará que la funciónsum
sume acumulativamente los recuentos para cada nombre individual.select
para que coincidan con el resultado esperado.Con estos cambios, la consulta debería generar el resultado esperado.