Filtrando datos con TOP y Offset-Fetch
Con
la opción TOP se puede filtrar o limitar la cantidad de filas que
serán retornadas en el set de datos del resultado. La clausula TOP
se específica en la clausula SELECT seguido del valor numérico
entre paréntesis (se puede sin paréntesis por compatibilidad).
Select
Top
(3)
P.PersonaId,
P.Nombre,
P.Apellido,
P.FechaNacimiento
FROM
Personas P
order
by
p.FechaNacimiento
En
este caso la cantidad de filas en el set de resultado será máximo
de 3 filas.
También
se puede especificar un valor porcentual de filas, para esto se debe
especificar la clausula TOP seguido del valor numérico dentro de
paréntesis y la palabra percent después de los paréntesis. El
valor numérico debe ser escrito entre 0 y 100. En caso de que el
resultado del porcentaje sea un valor decimal, este se redondea al
nivel superior.
El
total de filas para la tabla Personas es de 10, por este motivo el
resultado es:
Select
Top
(20)
Percent
P.PersonaId,
P.Nombre,
P.Apellido
FROM
Personas P
En
algunos casos el set de resultado elimina cierta cantidad de filas
que contienen los mismos valores dado un valor de ordenamiento. Si se
desea incluir estos valores en el set de resultado, con la clausula
TOP se debe especificar la sentencia WITH TIES después de
especificar el valor numérico a retornar.
Select
Top
(3)
P.PersonaId,
P.Nombre,
P.Apellido,
P.FechaNacimiento
FROM
Personas P
order
by
p.FechaNacimiento
Select
Top
(3)
with
ties P.PersonaId,
P.Nombre,
P.Apellido,
P.FechaNacimiento
FROM
Personas P
order
by
p.FechaNacimiento
En
este último query, el resultado incluye otra fila en el set de
resultado. Esto se da debido a la existencia de otro valor con la
misma fecha de nacimiento.
Filtrado
de datos con OFFSET-FETCH
La
opción de filtrado con OFFSET-FETCH también permite especificar el
filtrado a realizar por medio de un número de filas y ordenamiento.
Este es muy útil para propósitos de paginación. La clausula
OFFSET-FETCH requiere de la clausula order by ya que le indica a la
clausula OFFSET-FETCH cuales son las filas que se deben filtrar y
OFFSET puede existir sin FETCH, pero no FETCH sin OFFSET. Primero se
especifica la clausula OFFSET seguido del número de filas a omitir y
luego se especifica la clausula FETCH seguido del número de filas a
filtrar.
En
el siguiente ejemplo se omite la primera fila y se desea retornar las
2 siguientes filas.
Select
P.PersonaId,
P.Nombre,
P.Apellido,
P.FechaNacimiento
FROM
Personas P
ORDER
BY
p.PersonaId
OFFSET
1 ROWS
FETCH
NEXT
2 ROWS
ONLY;
Para
hacer más intuitivo la sintaxis, se recomienda utilizar las
clausulas NEXT y FIRST, cuándo se está realizando una omisión de
algunas filas utilizar NEXT, cuándo no se está omitiendo filas
utilizar FIRST.
Ejemplo
1:
Select
P.PersonaId,
P.Nombre,
P.Apellido,
P.FechaNacimiento
FROM
Personas P
order
by
p.PersonaId
OFFSET
0 rows
Trae
todas las filas de la tabla Personas, sin omitir alguna fila.
Ejemplo
2:
Select
P.PersonaId,
P.Nombre,
P.Apellido,
P.FechaNacimiento
FROM
Personas P
order
by
p.PersonaId
OFFSET
2 rows
Omite
las 2 primeras filas y trae el resto de filas en el set de resultado
Ejemplo
3:
Select
P.PersonaId,
P.Nombre,
P.Apellido,
P.FechaNacimiento
FROM
Personas P
order
by
p.PersonaId
OFFSET
0 rows
FETCH
first
2 rows
only
Trae
la 2 primeras filas
Ejemplo
4:
Select
P.PersonaId,
P.Nombre,
P.Apellido,
P.FechaNacimiento
FROM
Personas P
order
by
p.PersonaId
OFFSET
2 rows
FETCH
next
2 rows
only
Omite
las 2 primeras filas y trae las 2 filas siguientes
Comentarios
Publicar un comentario