SQL – Consulta dentro de la diferencia de meses desde el primer mes, contabilizando la actividad.
Tengo una tabla como la siguiente:
userid | status | month |
---|---|---|
1 | frequent | 01.04.2020 |
1 | infrequent | 01.02.2020 |
2 | frequent | 01.06.2020 |
3 | frequent | 01.04.2020 |
3 | infrequent | 01.03.2020 |
3 | frequent | 01.06.2020 |
4 | frequent | 01.06.2020 |
La pregunta es cuántos usuarios nuevos se convirtieron en frecuentes en algún momento dentro de 1 mes, 2 meses, 3 meses. Un usuario nuevo significa, por ejemplo, que el usuario 1 tiene la primera actividad el 01.02.2020, por lo que es un usuario nuevo en ese momento, y se convirtió en un usuario frecuente en 2 meses. Otro punto es que el usuario 3 es un usuario frecuente por segunda vez en 01.06.2020. Pero eso no es lo que me interesa. Quiero saber la primera vez.
Entonces, la salida debería ser así:
month | 1m | 2m | 3m | 4m |
---|---|---|---|---|
01.02.2020 | 0 | 1 | 0 | 0 |
01.03.2020 | 1 | 0 | 0 | 0 |
01.06.2020 | 2 | 0 | 0 | 0 |
No sé cómo escribir la consulta. Muchas gracias por el esfuerzo. Agradezco cualquier información.
davy.ai
Para responder a esta pregunta, podemos utilizar la siguiente consulta SQL:
Aquí tenemos un desglose de lo que está ocurriendo en la consulta:
mes
de la tabla.SUM
con una declaraciónCASE
para calcular el número de usuarios que se convirtieron enfrequent_user
dentro de un cierto período de tiempo (1 mes, 2 meses, o 3 meses).CASE
verifica si la diferencia en meses entre la primera actividad del usuario y su actividad en el mes actual es igual al período de tiempo en el que estamos interesados (0, 1 o 2 meses).mes
.status
es ‘frequent_user’.Esto debería proporcionarnos el resultado deseado como se muestra en la pregunta.