Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

SQL para ciencia de datos, Unidad 6 — Funciones avanzadas para análisis, 6.2 — Funciones de fecha y tiempo ·

Series temporales en SQL

Series temporales en SQL

Introducción

En el mundo de la ciencia de datos y el análisis, las series temporales son una herramienta fundamental para entender cómo los valores cambian con el tiempo. Las series temporales permiten analizar patrones, tendencias y estacionalidad en los datos que varían en el tiempo. En este artículo, exploraremos cómo utilizar funciones de SQL para trabajar con series temporales.

Explicación principal

Las series temporales son una secuencia de puntos de datos en los que el valor de una variable se observa a intervalos regulares en el tiempo. En SQL, podemos manipular y analizar estas series utilizando una serie de funciones específicas diseñadas para trabajar con fechas y tiempos.

Ejemplo: Creación de una tabla con datos temporales

Supongamos que tenemos una base de datos con registros diarios de temperatura:

CREATE TABLE temperature_data (
    date DATE PRIMARY KEY,
    temp FLOAT
);

Podemos insertar algunos datos:

INSERT INTO temperature_data (date, temp) VALUES 
('2023-10-01', 25.5),
('2023-10-02', 26.8),
('2023-10-03', 27.2),
('2023-10-04', 26.9);

Usando funciones de fecha y tiempo

1. Fecha actual

SELECT CURRENT_DATE;

Este comando nos devuelve la fecha actual.

2. Adición y sustracción de días, meses o años a una fecha

Para agregar o restar días, usamos INTERVAL:

SELECT date + INTERVAL '1' DAY AS future_date,
       date - INTERVAL '7' DAY AS past_week FROM temperature_data;

3. Extracción de partes de una fecha

Podemos extraer el año, mes o día de una fecha:

SELECT EXTRACT(YEAR FROM date) AS year,
       EXTRACT(MONTH FROM date) AS month,
       EXTRACT(DAY FROM date) AS day FROM temperature_data;

4. Comparación y agrupación por fechas

Podemos comparar fechas o agrupar datos según el año, mes o semana:

SELECT COUNT(*) as count, 
       EXTRACT(YEAR FROM date) as year,
       EXTRACT(MONTH FROM date) as month,
       EXTRACT(DAYOFYEAR FROM date) as day_of_year 
FROM temperature_data GROUP BY year, month, day_of_year;

5. Generación de rangos de fechas

Para generar un rango de fechas, podemos usar GENERATE_SERIES en algunos sistemas:

SELECT generate_series('2023-10-01'::date, '2023-10-07'::date, INTERVAL '1 day') as date_range;

Errores típicos / trampas

1. Uso incorrecto de EXTRACT

-- Error: Uso incorrecto de EXTRACT sin fecha
SELECT EXTRACT(MONTH FROM 2023) AS error;

La función EXTRACT requiere una columna o expresión que sea una fecha.

2. Incorporación de valores no válidos

-- Error: Ingreso de una fecha inválida
INSERT INTO temperature_data (date, temp) VALUES ('03-15-2023', 28.5);

Asegúrate de que las fechas sean válidas.

3. Uso incorrecto del INTERVAL

-- Error: Uso incorrecto de INTERVAL
SELECT date + '1' DAY FROM temperature_data;

El INTERVAL debe ser un string en formato adecuado, como '1 day'.

Checklist accionable

  • Verifica la estructura de tus fechas: Asegúrate de que tus fechas estén correctamente formateadas.
  • Utiliza EXTRACT para obtener partes específicas de una fecha: No intente extraer valores directamente de columnas que no son fechas.
  • Asegúrate de usar el formato correcto en INTERVAL: Utiliza strings como '1 day', '2 months' o '3 years'.
  • Utiliza CURRENT_DATE para obtener la fecha actual: Esto es especialmente útil cuando necesitas datos basados en el tiempo real.
  • Genera rangos de fechas con cuidado: Verifica que los valores de inicio y fin sean válidos.

Cierre

Siguientes pasos

  • Aprende a manipular series temporales en Python para una mayor flexibilidad en la manipulación de datos.
  • Explora funciones adicionales de SQL relacionadas con fechas: Algunas bases de datos tienen funcionalidades adicionales que pueden ser útiles.
  • Aplica tus conocimientos a un proyecto real: Trata de analizar una serie temporal real utilizando las técnicas que has aprendido.

Siguiendo estos pasos, podrás manipular y analizar series temporales con mayor confianza en tu trabajo como científico de datos.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).