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

#1 Esparta Palma
23/06/2004 - 11:27 | Informe spam
Te refieres a paginación?
Es decir, como lo tiene el comandante eMans en su site? http://www.eMans.com


Apoya a Visual FoxPro usándolo legalmente
?,ø?º°`°º?ø,??,ø?º°`°º?ø,??,ø?º°`°º?ø,??,ø?º°`°º
Espartaco Palma Martínez
SysOp PortalFox ( http://www.PortalFox.com )
email:
Acapulco, Guerrero. México


Nacho Amorós wrote:

Hola

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 zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#2 Nacho Amorós
23/06/2004 - 11:46 | Informe spam
Hola Súper!

Sí, más o menos es eso. El caso es que quiero traerme grupos de registros
a un form de consulta con botones de siguientes y anteriores, para traer
grupos hacia delante o hacia atrás. Esta opción no viene nativa en fox,
cosa que agradecería a alguien que lo pusiera en el wish list, ya que si
tengo que explicarlo en inglés no me va a entender ni Dios.
El caso es poder indicarle al motor que, una vez realizada la consulta de
toda la tabla, coja x registros a partir del registro tal.

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
#3 Luis María Guayán
24/06/2004 - 06:12 | Informe spam
Nacho, lo podrias hacer (a partir del segundo SELECT) con dos clausulas SELECT.

Tomo como ejemplo la tabla Customers de la base de datos Northwind (VFP8)

1° SELECT:

SELECT TOP 10 * ;
FROM Customers T1 ;
ORDER BY CustomerId

A partir del segundo SELECT (incremento el TOP de 10 en 10 para el cursor
Auxiliar en la variable lnTop)

lnTop = 10
SELECT TOP lnTop * ;
FROM Customers T1 ;
ORDER BY CustomerId ;
INTO CURSOR Auxiliar

SELECT TOP 10 * ;
FROM Customers T1 ;
WHERE NOT EXISTS ;
(SELECT CustomerId FROM Auxiliar T2 ;
WHERE T1.CustomerId = T2.CustomerId) ;
ORDER BY CustomerId

Próximo SELECT (TOP 20):

lnTop = 20
SELECT TOP lnTop * ;
FROM Customers T1 ;
ORDER BY CustomerId ;
INTO CURSOR Auxiliar

SELECT TOP 10 * ;
FROM Customers T1 ;
WHERE NOT EXISTS ;
(SELECT CustomerId FROM Auxiliar T2 ;
WHERE T1.CustomerId = T2.CustomerId) ;
ORDER BY CustomerId

y así sucesivamente hasta que no me retorne ningún registro. Para el botón
Anterior decrementas lnTop en 10.

Espero que te sirva, o te de una idea


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 Súper!

Sí, más o menos es eso. El caso es que quiero traerme grupos de registros
a un form de consulta con botones de siguientes y anteriores, para traer
grupos hacia delante o hacia atrás. Esta opción no viene nativa en fox,
cosa que agradecería a alguien que lo pusiera en el wish list, ya que si
tengo que explicarlo en inglés no me va a entender ni Dios.
El caso es poder indicarle al motor que, una vez realizada la consulta de
toda la tabla, coja x registros a partir del registro tal.

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
#4 Nacho Amorós
24/06/2004 - 09:53 | Informe spam
Gracias LuisMa por tu ayuda, pero creo que he encontrado una solución que
me permite hacerlo con un sólo select.

Se trata de pasarle al componente un cursor XML con sólo el campo clave
principal de cada registro, y luego en el componente incluyo este cursor
para compararlo en una subconsulta y excluir así los registros que le he
marcado.

Algo así:

SELECT TOP 10 field1,field2,field3 FROM datos ;
WHERE field3 NOT IN ;
(SELECT field3 FROM curtemp) ;
ORDER BY field1

De todos modos gracias por tu ayuda, realmente es otra solución. Esto
demuestra una vez más que VFP puede con todo y de varias formas :-))))

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
#5 Luis María Guayán
24/06/2004 - 14:12 | Informe spam
Otra opción, sin pasar un cursor, solo pasando el código del último registro
de cada decena seria:

lcId = "00000"
SELECT TOP 10 * ;
FROM Customers ;
WHERE CustomerId > ?lcId ;
ORDER BY CustomerId

el siguiente:

lcId = "CACTU"
SELECT TOP 10 * ;
FROM Customers ;
WHERE CustomerId > ?lcId ;
ORDER BY CustomerId

(los ejemplos son con la tabla Northwind!Customers de los ejemplos de VFP8)

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:%
Gracias LuisMa por tu ayuda, pero creo que he encontrado una solución que
me permite hacerlo con un sólo select.

Se trata de pasarle al componente un cursor XML con sólo el campo clave
principal de cada registro, y luego en el componente incluyo este cursor
para compararlo en una subconsulta y excluir así los registros que le he
marcado.

Algo así:

SELECT TOP 10 field1,field2,field3 FROM datos ;
WHERE field3 NOT IN ;
(SELECT field3 FROM curtemp) ;
ORDER BY field1

De todos modos gracias por tu ayuda, realmente es otra solución. Esto
demuestra una vez más que VFP puede con todo y de varias formas :-))))

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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida