[SQL] Mostrar una Fila determinada

Tengo una duda que no sé si alguien que sepa SQL (MS SQL) podría ayudarme; supongo que es bastante básica en SQL, pero por muchas pruebas que haga no lo consigo.

Si se quieren mostrar las primeras X filas se puede hacer mediante:

SELECT TOP X * FROM tabla;


Tampoco habría problema para mostrar las últimas X filas, ¿pero y si quisiera mostrar únicamente 1 fila que se encuentra en la posición N?

Un saludo y gracias ;)
Algo así? SELECT * FROM table ORDER BY loquesea LIMIT 1 OFFSET 20;

o así?

SELECT * FROM
(SELECT ROW_NUMBER() OVER (ORDER BY loquesea) AS RowNum, * FROM table) sub
WHERE RowNum = 20
exitfor escribió:Algo así? SELECT * FROM table ORDER BY loquesea LIMIT 1 OFFSET 20;

o así?

SELECT * FROM
(SELECT ROW_NUMBER() OVER (ORDER BY loquesea) AS RowNum, * FROM table) sub
WHERE RowNum = 20


Estaba utilizando la web online http://www.w3schools.com/sql/trysql.asp ... func_round (SQL Tryit Editor v1.5) dónde puedes realizar pruebas.

He intentado con la siguiente consulta para ver si funcionaba:

SELECT * FROM
(SELECT ROW_NUMBER() OVER (ORDER BY CustomerID) AS RowNum, * FROM Customers) sub
WHERE RowNum = 9;


Pero obtengo un error:
Syntax error (missing operator) in query expression 'ROW_NUMBER() OVER (ORDER BY CustomerID)'.


Un saludo ;)
Como te comenta Exitfor se hace con rownumber.

Yo lo utilicé hace poco para exportar a excel determinados números de registros dependiendo del paginado donde se encontrara la aplicación web que he desarrollado:

SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY Id) NUM,
* FROM #Tabla
) A
WHERE NUM >14 AND NUM <31

Simplemente aisla el numéro de posición que desees, o especifica NUM = N

Un saludo :)
moreno_cos escribió:Como te comenta Exitfor se hace con rownumber.

Yo lo utilicé hace poco para exportar a excel determinados números de registros dependiendo del paginado donde se encontrara la aplicación web que he desarrollado:

SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY Id) NUM,
* FROM #Tabla
) A
WHERE NUM >14 AND NUM <31

Simplemente aisla el numéro de posición que desees, o especifica NUM = N

Un saludo :)


Muchas gracias @moreno_cos y @exitfor ;)
He probado en otro lugar: https://data.stackexchange.com/stackoverflow/query/new

SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNum, * FROM CloseReasonTypes) sub WHERE RowNum > 1 AND RowNum < 3;


SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNum, * FROM CloseReasonTypes) sub WHERE RowNum = 2;


Ambas funcionan correctamente, siendo más rápida la consulta especificando el número exacto.

Un saludo ;)
Microsoft SQL Server 2000 no soporta la función ROW_NUMBER() así he decidido atacar el problema con PHP.

Estaba realizando pruebas con PHP y he visto que existe la siguiente función:

bool odbc_fetch_row ( resource $result_id [, int $row_number ] )


En esta función paso el número concreto de una fila, pero la función devuelve un booleano.

¿Sabéis si existe alguna función similar que devolviera "todas las columnas de una fila determinada"?

Veo que existe:
object odbc_fetch_object ( resource $result [, int $rownumber ] )

Pero únicamente existe cuando la compilación se ha realizado con soporte para DBMaker, IBM DB2 o UnixODBC.

Un saludo ;)
Usas sql server 2000 por algo? Es que es antiguo, muy antiguo, buscate algo mas modernito que te irá mucho mejor.

Y efectivamente con row_number es como se hacen esas cosas.
piccolo_knd escribió:Usas sql server 2000 por algo? Es que es antiguo, muy antiguo, buscate algo mas modernito que te irá mucho mejor.

Y efectivamente con row_number es como se hacen esas cosas.

Entiendo y sé que no es lógico pero NO puedo cambiar de SQL SERVER 2000. :(
He visto que si es posible acceder mediante
object odbc_fetch_object ( resource $result [, int $rownumber ] )

A modo de test si pinto el contenido del objeto:
echo var_dump($objEOL)

Obtengo lo siguiente:
object(stdClass)(5) { ["piezaID1"]=> string(4) "2895" ["refEOL"]=> string(8) "11-07-16" ["refWEB"]=> string(19) "VVZZ 0000,1122FF-K " ["codModelo"]=> string(2) "AZ" ["piezaID"]=> NULL }


Hasta aquí todo perfecto, pero ahora quiero almacenar en una variable únicamente el valor que tengo en refEOL.
Entiendo que tengo un objecto de stdClass e intento acceder a la información haciendo:
$objEOL-->refEOL

Pero en lugar de recibir un string, tengo un booleano.

¿Sabéis qué estoy haciendo mal?

Edito:
$objEOL->refEOL

Es suficiente :)
7 respuestas