La función DATE_BIN en PostgreSQL englobada en las denominadas funciones de fecha, permite agrupar marcas de tiempo en intervalos definidos, alineándolos con un origen específico. Esto resulta particularmente útil para crear agregaciones de datos temporales, como segmentar eventos en intervalos horarios, diarios o semanales, proporcionando una forma eficiente de analizar información temporal en bloques consistentes.
El funcionamiento de DATE_BIN se basa en tres parámetros principales: el intervalo, el origen y la marca de tiempo de entrada. Al especificar estos valores, la función ajusta cada marca de tiempo al intervalo más cercano alineado con el origen indicado. Su flexibilidad y precisión hacen que sea una herramienta clave para trabajar con series temporales o datos que requieren agrupaciones basadas en tiempo.
En este artículo, explicaremos en detalle cómo utilizar la función DATE_BIN con ejemplos prácticos y exploraremos sus aplicaciones en diferentes escenarios. Para más información, puedes consultar la documentación oficial de PostgreSQL.
Sintaxis
La sintaxis para utilizar la función DATE_BIN en PostgreSQL es la siguiente:
date_bin(intervalo, fuente, origen)
- Intervalo: es una expresión de valor de tipo intervalo. Esto determina los intervalos recurrentes que se utilizan para «bin» fuente en. El intervalo debe ser mayor que cero y no puede contener unidades de mes o mayores.
- Fuente: es una expresión de valor de tipo timestamp o timestamp con zona horaria. (Los valores de tipo date se convierten automáticamente en timestamp).
- Origen: es el origen del intervalo. En otras palabras, aquí es donde comienza el intervalo recurrente.
El valor de retorno es de tipo timestamp o timestamp con zona horaria (dependiendo de los valores de entrada), y marca el inicio de la ubicación en la que se coloca la fuente.
Ejemplos
select date_bin('15 minutes', timestamp '2001-02-16 20:38:40', timestamp '2001-02-16 20:05:00')

En este otro ejemplo comprobamos cómo nos devuelve la fecha y hora ‘2022-01-01 15:00:00’ ya que se ha puesto un intervalo de 15 minutos y el valor dentro del rango más próximo a ‘2022-01-01 15:07:00’ son las tres en punto.
select date_bin('15 minutes', TIMESTAMP '2022-01-01 15:07:00', TIMESTAMP '2020-01-01');

En este otro ejemplo partimos de ‘2022-01-01 15:17:00’ en intervalo de 15 minutos y el resultado es ‘2022-01-01 15:15:00’
select date_bin('15 minutes', TIMESTAMP '2022-01-01 15:17:00', TIMESTAMP '2020-01-01');
