Select SQL con SKIP

23/06/2004 - 10:46 por Nacho Amorós | Informe spam
Hola amig@s

Tengo el siguiente caso:

Necesito hacer una consulta que representada sintácticamente sería algo
así:

SELECT TOP 10 SKIP 30 * FROM datos ORDER BY 1

Es decir

Elijo los primeros 10 registros de una consulta sobre una tabla, pero A
PARTIR DEL REGISTRO 30 de la consulta. Esto me hace falta para recoger
grupos de registros de una tabla gorda vía WS de forma secuencial. En
MySQL lo puedo hacer.

¿Alguna idea?
Gracias


Nacho Amorós
<a href="mailto:infomartin&#64;terra.es">infomartin&#64;terra.es</a>

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa

Preguntas similare

Leer las respuestas

#6 Nacho Amorós
24/06/2004 - 14:25 | Informe spam
Hola de nuevo LuisMa que bueno que despertaste ya! :-)))

Ya había pensado en esa opción, pero tiene un inconveniente:

¿Qué ocurre cuando hay más de 10 registros con el mismo valor en el campo
a ordenar?
Que sólo me mostraría los 10 primeros, los siguientes los pasaría por
alto, y si pongo ">=" siempre me sacaría los mismos.

Salu2


Nacho Amorós
<a href="mailto:infomartin&#64;terra.es">infomartin&#64;terra.es</a>

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
Respuesta Responder a este mensaje
#7 Luis María Guayán
24/06/2004 - 20:36 | Informe spam
Mira la ayuda de SELECT TOP ...

"... Las filas de valores idénticos para las columnas especificadas en la
cláusula ORDER BY se incluyen en el resultado de la consulta. Por lo tanto,
si especifica 10 para nExpr, el resultado de la consulta podrá obtener más
de 10 filas, si hay más de 10 filas con valores idénticos para las columnas
especificadas en la cláusula ORDER BY..."

El inconveniente es que te mostrará mas de 10, pero no te saltearás ningún
registro.

Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos


"Nacho Amorós" escribió en el mensaje
news:
Hola de nuevo LuisMa que bueno que despertaste ya! :-)))

Ya había pensado en esa opción, pero tiene un inconveniente:

¿Qué ocurre cuando hay más de 10 registros con el mismo valor en el campo
a ordenar?
Que sólo me mostraría los 10 primeros, los siguientes los pasaría por
alto, y si pongo ">=" siempre me sacaría los mismos.

Salu2


Nacho Amorós
<a href="mailto:infomartin&#64;terra.es">infomartin&#64;terra.es</a>


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#8 Nacho Amorós
25/06/2004 - 10:05 | Informe spam
Así es LuisMa gracias!

Al probar mi código me dí cuenta cuando me devolvió 71 registros de una
tacada. Ví la ayuda y ahí estaba lo que me comentas.

Gracias de nuevo
Salu2


Nacho Amorós
<a href="mailto:infomartin&#64;terra.es">infomartin&#64;terra.es</a>

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
Respuesta Responder a este mensaje
#9 Luis María Guayán
26/06/2004 - 20:52 | Informe spam
Al probar mi código me dí cuenta cuando me devolvió 71 registros de una
tacada. Ví la ayuda y ahí estaba lo que me comentas.



No desespereis hombre !!!

VFP9 solo trae los "n" registros especificados en TOP N forzando la
compatibilidad con VFP9

Prueba estos dos ejemplos:

*-- Compatibilidad con VFP9 --
SET ENGINEBEHAVIOR 90
OPEN DATABASE (HOME(2) + "Northwind\Northwind")
SELECT TOP 10 * ;
FROM Customers T1 ;
ORDER BY Country

MESSAGEBOX(_TALLY)

*-- Compatibilidad con VFP8 --
SET ENGINEBEHAVIOR 80
OPEN DATABASE (HOME(2) + "Northwind\Northwind")
SELECT TOP 10 * ;
FROM Customers T1 ;
ORDER BY Country

MESSAGEBOX(_TALLY)


VFP9 también permite la cláusula ORDER BY en conjunción con TOP N en
subconsultas. (lee el archivo "SQLFeatures.htm" que se encuentra en el archivo
"VFP9RELNOTES.EXE" que está para descarga en el mismo sitio que la Beta de VFP9)

Con esto, el SELECT que necesitas lo puedes ejecutar en una sola sentencia:

*-- Los ejemplos son con la DB Northwind
OPEN DATABASE (HOME(2) + "Northwind\Northwind")

*-- La primera vez
SELECT TOP 10 * ;
FROM Customers T1 ;
ORDER BY CustomerId

lnTop = 0
DO WHILE _TALLY = 10
*-- Las subsiguientes, incrementando lnTop en 10 cada ciclo
lnTop = lnTop + 10
SELECT TOP 10 * ;
FROM Customers T1 ;
WHERE T1.CustomerId NOT IN ;
(SELECT TOP lnTop T2.CustomerId ;
FROM Customers T2 ;
ORDER BY CustomerId) ;
ORDER BY CustomerId
*-- Presionar [Esc] hasta que finalice
ENDDO

Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida