Skip to content
Empieza gratis

¿Cuántos días o meses hay entre dos fechas en SQL y pandas?

Calcula los días entre dos fechas y elige entre date_diff y date_sub cuando la pregunta es en meses: fronteras del calendario o meses completos.

Curso gratis. Tu Maestro, una IA, .

Los clientes frecuentes

Café Altura tiene un programa de clientes frecuentes. La tabla clientes trae 24 clientes sintéticos con su fecha_nacimiento, su fecha_alta en el programa y su ultima_visita. Las tres columnas ya son fechas.

En este módulo, "hoy" es siempre el 30 de junio de 2026, el último día de ventas_diarias. Es a propósito: si un reporte usa la fecha del día en que lo corres, da otro resultado cada vez que lo corres. Escribe la fecha de referencia en la consulta y el resultado se puede repetir.

La pregunta más simple con dos fechas es cuánto tiempo pasó entre ellas. Predice.

Tres cuentas con fechas en DuckDB, desde Python. Escribe qué crees que imprime cada una y por qué.

Tres cuentas con fechas en DuckDB, desde Python. Escribe qué crees que imprime cada una y por qué.

Restar dos fechas

Ejemplo 1 de 3

restar.py
import duckdb

print(duckdb.sql("SELECT DATE '2026-06-30' - DATE '2026-01-01' AS dias").fetchone()[0])

Adivinar está bien: se guarda tal como la escribiste para compararla. Solo tú y tu Maestro ven tus predicciones.

Ejemplo 2 de 3, se abre cuando expliques este

Haz tu predicción

Fronteras o periodos completos

DuckDB tiene dos funciones que parecen la misma y responden preguntas distintas. Su documentación las define así:

  • date_diff(parte, inicio, fin) cuenta las fronteras de esa parte que hay entre las dos fechas: cuántos inicios de mes, de año o de día se cruzan.
  • date_sub(parte, inicio, fin) cuenta cuántas partes completas caben, y descarta lo que sobra.

Para días dan lo mismo, y restar las fechas también. Para meses y años no. Si la pregunta es "¿en cuántos meses distintos estuvo activa la cuenta?", sirve date_diff. Si es "¿cuántos meses completos lleva?", sirve date_sub. Y si la regla del negocio está en días ("inactivo después de 90 días"), cuenta días: tres meses no son 90 días. Si no sabes cuál usar para tu pregunta, pregúntale a tu Maestro.

Restar dos columnas de fechas da una duración; .dt.days la deja en días:

Python
data["dias_en_programa"] = (data["ultima_visita"] - data["fecha_alta"]).dt.days

Para la fecha de referencia, usa pd.Timestamp("2026-06-30") en vez de la fecha de hoy.

SQL
SELECT
  nombre,
  ultima_visita - fecha_alta AS dias_en_programa,
  DATE '2026-06-30' - ultima_visita AS dias_sin_venir
FROM clientes;

date_diff('day', fecha_alta, ultima_visita) da lo mismo que la resta.

Inténtalo

Café Altura llama "dormido" a un cliente que no viene hace más de 90 días. La consulta de abajo los cuenta con date_diff('month', ...) > 3, que no es la regla. Cámbiala para que cuente días desde la última visita hasta el 30 de junio de 2026. Una buena respuesta cuenta 21 clientes; la consulta de meses cuenta 20.

Cuenta los clientes dormidos: los que al 30 de junio de 2026 llevan más de 90 días sin venir.

Tu turno

Cuenta los clientes dormidos: los que al 30 de junio de 2026 llevan más de 90 días sin venir.

Tablas: clientes (cliente_id, nombre, fecha_nacimiento, fecha_alta, ultima_visita)

clientes · 24 filas

ColumnaTipo
cliente_idBIGINT
nombreVARCHAR
fecha_nacimiento Fecha de nacimiento.DATE
fecha_alta Día en que se inscribió al programa de clientes frecuentes.DATE
ultima_visita Día de su visita más reciente.DATE

Primeras filas

cliente_idnombrefecha_nacimientofecha_altaultima_visita
1Ana Ruiz1990-07-012026-01-312026-02-01
2Beto Garza2000-02-292025-01-282025-06-15
3Carla Méndez1985-06-302024-02-062025-10-21

Cada ejecución empieza con copias nuevas de las tablas del curso, así que puedes probar lo que quieras.

Listo para ejecutar tu consulta.

Ejecútalo tú

Inténtalo sin ayuda

Ahora en pandas y desde cero: calcula cuántos días pasaron entre la fecha_alta y la ultima_visita de cada cliente, e imprime quién tiene más días y cuántos. Una buena respuesta da un solo nombre y un número entero de días, no una duración con horas. Si te sale algo como 100 days 00:00:00, pégale tu código a tu Maestro.

Calcula los días entre fechaalta y ultimavisita de cada cliente e imprime el nombre del que tiene más días y cuántos son.

Calcula los días entre fecha_alta y ultima_visita de cada cliente e imprime el nombre del que tiene más días y cuántos son.

Ejecuta tu código para ver lo que imprime y el valor de su última expresión. Cada ejecución empieza de nuevo.

Listo para ejecutar tu código.

Ejecuta tu código para ver su salida aquí.

Datos: clientes-frecuentes, 24 filas

Enter guarda una celda y Escape la deja como estaba. Deja una celda vacía para un valor faltante.

Los datos del ejercicio, "clientes-frecuentes". Tus cambios corren con tu código.
FilaQuitar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Página 1 de 2

Ejecútalo tú

Comprueba lo que sabes: ¿Qué da date_diff('month', DATE '2026-03-31', DATE '2026-04-01')?