Skip to content

Uso de PARTITION T-SQL

by en 18 mayo, 2011

Cuando realizamos consultas con funciones de agregado, debemos utilizar la sentencia GROUP BY, hasta aquí todos sabemos como funciona, pero ¿cómo podemos obtener otros valores aparte de los que estamos agrupando?

Ejemplo:

Consideren el siguiente modelo de base de datos

Necesitamos obtener los hobbies de las personas con mayor fecha de nacimiento (para qué, no importa, esto es un ejemplo ¬¬)

Para esto haríamos la siguiente consulta

SELECT HOBBY, MAX(BIRTH_DATE) FROM PEOPLE GROUP BY HOBBY

Esta consulta nos devolverá el hobby y la última fecha de nacimiento ingresada para ese hobby.

Ahora supongamos que necesitamos no solo el Hobby y la última fecha de nacimiento, ¿qué pasaría si yo solicitara también el ID, NAME y LASTNAME? ¿Cómo lo hacemos?

Bueno, les comento que existe una comando llamado PARTITION, el cual particiona los datos entregados y nos permite obtener lo que necesitamos:

SELECT *
	FROM (
		SELECT *
			, ROW_NUMBER() OVER(PARTITION BY HOBBY ORDER BY BIRTH_Date desc) RN
		FROM PEOPLE
	) derived
WHERE RN <= 1

La consulta anterior utiliza una técnica que no sé qué tan eficiente será, pero funciona de maravillas😛

Lo que hace es particionar los datos de cada Hobby, reseteando RowNumber para cada hobby. Una vez que trae todos los datos con su respectivo RowNumber y luego a filtrar🙂

Si encontraron mi explicación muy enredada, les dejo los scripts para crear las tablas, poblarlas y luego a jugar, un ejemplo vale más que mil explicaciones🙂

Por motivos de WordPress, los scripts van en PDF y no en .SQL. Simplemente copy/paste ^^

CREATE TABLES

INSERTS

Esta pregunta la hice en Experts-Exchange: fuente

From → SQL, T-SQL

Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: