BÚSCAME EN: Last FM Filmaffinity Facebook Youtuve Blogger Twitter Feed Instagram
Puedes acceder a este blog mediante las direcciones www.ignacionario.com o ignacionario.blogspot.com. También puedes contactar a través de la dirección de correo electrónico contacto@ignacionario.com.

13 de diciembre de 2010

SQL: Cómo obtener la primera y la última fila de los registros de una consulta

Primera y última fila de una sentencia SQL


En el mundo de la programación y el desarrollo de aplicaciones, a veces nos pasa que queremos hacer algo muy sencillo pero no recordamos cómo hacerlo. Pues bien, a mí me ha pasado algo parecido, así que os lo voy a comentar con un breve ejemplo por si a alguien más le pasa, espero que os sirva de ayuda.



A continuación os indico las sentencias SQL generadas para obtener la primera y última fila de una tabla, probados con SQL Server. Para el ejemplo he generado una pequeña tabla de Pedidos con los campos:
  • ID del pedido
  • Descripción del pedido
  • Fecha del pedido
  • Cliente
  • Dirección de entrega de dicho pedido.

Paso 1: Identificar el criterio de ordenación de la consulta para saber qué datos queremos coger exáctamente.
En este caso realizaremos el ejemplo ordenando los pedidos por fecha, cogiendo así el primer y el último pedido de todos los realizados.

SELECT *
FROM Pedido
ORDER BY Fecha

Paso 2: Obtenemos el primer y el último registro de la consulta
Obtenemos el primer y el último registro. Utilizando la palabra reservada TOP podemos especificar el número de registros que queremos obtener, por lo tanto, realizaremos dos sentencias obteniendo sólo el primer valor. Las dos sentencias solo se diferenciarán en el criterio de ordenación, de modo que en una sentencia obtengamos el primer registro y en la siguiente el último. 

Primer registro: Utilizamos ordenación Ascendente (ASC).
SELECT TOP 1 *  
FROM Pedido
ORDER BY Fecha ASC

Último registro: Utilizamos ordenacion Descencente (DESC), para obtener los resultados en orden inverso.
SELECT TOP 1 *
FROM Pedido
ORDER BY Fecha DESC

Paso 3: Unimos los dos registros devueltos en una única consulta
Para unir las dos consultas en una úncia sentencias utilizaremos UNION:

(
SELECT TOP 1 *  
FROM Pedido
ORDER BY Fecha ASC
)
UNION
(
SELECT TOP 1 *
FROM Pedido
ORDER BY Fecha DESC
)

Si ejecutamos esta sentencia en SQL Server nos dara el siguiente error:
Incorrect syntax near the keyword 'ORDER'.

Esto se debe a que los UNION no permiten utilizar un ORDER BY en sus consultas, para ello debemos "camuflar" ese ORDER BY en una subconsulta de manera que pueda ejecutarse sin ningún problema


SELECT (

SELECT TOP 1 *  
FROM Pedido
ORDER BY Fecha ASC

)
UNION
SELECT (

SELECT TOP 1 *
FROM Pedido
ORDER BY Fecha DESC

)

El resultado sería el siguiente:

Resultado con la primera y última fila de la sentencia SQL


6 comentarios:

  1. Chebere buen Tips 

    ResponderEliminar
  2. hey, me haz salvado la vida, no conocía la sentencia top
    gracias por el dato :)

    ResponderEliminar
  3. Excelente amigo, gracias me ayudará =)

    ResponderEliminar
  4. flickr.com/morenostar24 de abril de 2013, 15:19

    SELECT ID, MAX(FECHA) FROM TABLA
    GROUP BY ID
    ORDER BY ID
    UNION
    SELECT ID, MIN(FECHA) FROM TABLA
    GROUP BY ID
    ORDER BY ID

    ResponderEliminar
  5. hola... hice el mismo procedimiento en C# y me sale el error "Sólo se puede especificar una expresión en la lista de selección cuando la subconsulta no se especifica con EXISTS." ayuda porfavor

    ResponderEliminar

Si estás conectado a tu cuenta de Google, puedes pulsar la opción Suscripción por correo electrónico que aparece a la derecha del botón Publicar comentario para recibir los comentarios que se publiquen en tu cuenta de correo electrónico, así podrás realizar un seguimiento de lo que se habla en esta entrada.
Si quieres enterarde de nuevos post, puedes subscribirte por correo, o hacerte seguidor tanto en blogger como en mi cuenta de twitter (ignacionario)

Related Posts Plugin for WordPress, Blogger...