Cálculo de días entre la primera y última sesión

Cálculo de días entre primera y última sesión en SQL 2025

Mientras navegaba por Reddit, me encontré con un problema que, aunque estaba planteado en otro contexto, tenía un patrón lógico muy útil para análisis temporal. El reto consistía en calcular la diferencia entre el primer y último evento de un usuario dentro de un año. Inspirado en ese ejercicio, preparé una versión adaptada al mundo del análisis educativo: el cálculo de días entre la primera y última sesión en SQL para 2025 usando CTE con datos. La idea es resolverlo sin crear tablas, sin DDL y sin dependencias externas.

Ese tipo de problema aparece en plataformas educativas, aplicaciones móviles, sistemas de sensores y prácticamente cualquier sistema que registre actividad.


El algoritmo que vamos a usar

Antes de ver el SQL, conviene entender la lógica que aplicaremos. Es simple, pero poderosa:

  1. Crear un CTE con datos ficticios que simulen los datos.
  2. Filtrar únicamente las sesiones ocurridas en 2025.
  3. Agrupar por estudiante.
  4. Para cada estudiante:
    • Encontrar la primera fecha del año.
    • Encontrar la última fecha del año.
    • Contar cuántas sesiones tuvo.
  5. Quedarnos solo con estudiantes que tuvieron al menos dos sesiones.
  6. Calcular la diferencia en días entre la primera y la última sesión.

Ese es el algoritmo. Estará incrustado como comentarios dentro del SQL, en español y en inglés.


Consulta SQL que resuelve el problema del cálculo de días

WITH learning_sessions AS (
    -- [ES] 1. Creamos un CTE con datos ficticios que simulan sesiones de estudiantes.
    -- [EN] 1. Create a CTE with sample data simulating student sessions.
    SELECT *
    FROM (VALUES
        (101, CAST('2025-01-03 08:10:00' AS DATETIME), 'mobile'),
        (101, CAST('2025-03-22 14:55:00' AS DATETIME), 'web'),
        (102, CAST('2025-02-10 09:00:00' AS DATETIME), 'web'),
        (102, CAST('2025-02-11 09:05:00' AS DATETIME), 'web'),
        (102, CAST('2025-10-01 18:20:00' AS DATETIME), 'mobile'),
        (103, CAST('2025-07-15 12:00:00' AS DATETIME), 'tablet'),
        (104, CAST('2025-01-01 00:30:00' AS DATETIME), 'mobile'),
        (104, CAST('2025-12-31 23:50:00' AS DATETIME), 'web')
    ) AS t(student_id, session_start, device)
),
sessions_2025 AS (
    -- [ES] 2. Filtramos únicamente las sesiones ocurridas en 2025.
    -- [EN] 2. Filter only the sessions that occurred in 2025.
    SELECT 
        student_id,
        CAST(session_start AS DATE) AS session_date
    FROM learning_sessions
    WHERE session_start >= '2025-01-01'
      AND session_start <  '2026-01-01'
),
agg AS (
    -- [ES] 3. Agrupamos por estudiante.
    -- [EN] 3. Group by student.

    -- [ES] 4. Para cada estudiante obtenemos:
    --       - primera fecha del año (MIN)
    --       - última fecha del año (MAX)
    --       - total de sesiones (COUNT)
    -- [EN] 4. For each student we compute:
    --       - first date of the year (MIN)
    --       - last date of the year (MAX)
    --       - total sessions (COUNT)

    -- [ES] 5. Nos quedamos solo con estudiantes con al menos dos sesiones.
    -- [EN] 5. Keep only students with at least two sessions.
    SELECT
        student_id,
        MIN(session_date) AS first_day,
        MAX(session_date) AS last_day,
        COUNT(*) AS total_sessions
    FROM sessions_2025
    GROUP BY student_id
    HAVING COUNT(*) >= 2
)
-- [ES] 6. Calculamos la diferencia en días entre la primera y última sesión.
-- [EN] 6. Calculate the difference in days between first and last session.
SELECT
    student_id,
    DATEDIFF(DAY, first_day, last_day) AS days_between
FROM agg
ORDER BY student_id;

Por qué el patrón es tan útil para el cálculo de días entre la primera y última sesión

Este tipo de problemas aparece en:

  • análisis de retención
  • cohortes
  • comportamiento anual
  • modelos predictivos de abandono de usuarios
  • análisis de actividad mínima
  • pipelines de features para machine learning

Y lo mejor es que el patrón es siempre el mismo: cambia la tabla o el dominio, pero el algoritmo permanece.


Conclusión

El cálculo de días entre la primera y última sesión en SQL para 2025 usando CTE con datos es un ejemplo útil para resolver un problema real sin necesidad de infraestructura adicional. Además, el algoritmo es claro, replicable y aplicable a múltiples dominios.

Puede descargar el código de la solución aquí.

Imagen de uniliderpromocionPixabay

error: Content is protected !!