• Viernes 8 de Noviembre de 2024, 19:08

Autor Tema:  Equivalente A Limit  (Leído 8188 veces)

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Equivalente A Limit
« en: Miércoles 7 de Febrero de 2007, 23:53 »
0
En MySQL existe la funcion LIMIT, que sirve para limitar el numero de registros que uno quiere ver en una seleccion.
Alguien sabe cual es su equivalente en SQL SERVER ??

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #1 en: Jueves 8 de Febrero de 2007, 00:19 »
0
Código: Text
  1. Select TOP 5 *
  2.              From tu_tabla
  3.  

Espero te sirva....  ;)

 :comp:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #2 en: Jueves 8 de Febrero de 2007, 00:25 »
0
si eso sirve de algo.

pero en realidad con eso se puede obtener:
los primeros 5 registros.
los primeros 10 registros.
.
.
los primeros N registros.

y no asi:

los segundos N registros como lo hace LIMIT.


GRACIAS.

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #3 en: Jueves 8 de Febrero de 2007, 00:27 »
0
MMMMMM ose lo que vos queres es que te aparezcan los primeros 5 luego otros 5 como que si tuviesen tiempo de espera para que se muestren ?
 :unsure:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #4 en: Jueves 8 de Febrero de 2007, 00:29 »
0
exacto


googleando por ahi me encontre con esto.

Código: Text
  1.  
  2. Returning only the first N records in a SQL query differs quite a bit between database platforms. Here's some samples:
  3.  
  4. Microsoft SQL Server
  5.  
  6. SELECT TOP 10 column FROM table
  7.  
  8. PostgreSQL and MySQL
  9.  
  10. SELECT column FROM table
  11. LIMIT 10
  12.  
  13. Oracle
  14.  
  15. SELECT column FROM table
  16. WHERE ROWNUM <= 10
  17.  
  18. Sybase
  19.  
  20. SET rowcount 10
  21. SELECT column FROM table
  22.  
  23. Firebird
  24.  
  25. SELECT FIRST 10 column
  26. FROM table
  27.  
  28. Due to these differences if you want to keep your code database independent you should use the maxrows attribute in the cfquery tag in ColdFusion. The tradeoffs to database independance is performance, I would expect maxrows to be slower than specifying the rows in the SQL.
  29.  
  30. <cfquery datasource="#ds#" maxrows="10">
  31. SELECT column FROM table
  32. </cfquery>
  33.  
  34. PostgreSQL and MySQL have a cool feature that will let you return an arbitrary range of rows (eg return rows 10-20). This is very handy for displaying pages of records:
  35.  
  36. SELECT column FROM table
  37. LIMIT 10 OFFSET 20
  38.  
  39.  

Al parecer no se puede hacer lo que quiero en SQL Server.

pero seguire intentando.

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #5 en: Jueves 8 de Febrero de 2007, 00:33 »
0
No se si te sirva esto pero intenta hacer como que una funcion que te vaya como que incrementando tu resultado .... ahora no tengo mucho tiempo para resolvertelo pero con esto creo que te va a servir ..(espero  :blink: )

Código: Text
  1. WAITFOR DELAY '00:00:02'
  2. select top 5 * from t_trade_ticket
  3.  

Ya tu funcion tendra que manera el top (resultados) y el tiempo de espera, para que cuando el tiempo se cumpla te muestre los siguientes registros.. y asi sucesivamente....
 :comp:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Equivalente A Limit
« Respuesta #6 en: Jueves 8 de Febrero de 2007, 01:05 »
0
Me parece que lo que Lencho quiere es obtener los primeros n registros a partir de la posición k como permite hacerlo LIMIT n,k.-

No conozco la forma pero si tu tabla tiene una clave única numérica (id por ejemplo) podrías hacer uso del WHERE y el ORDER BY.

Código: Text
  1. SELECT TOP 5 * FROM Tabla WHERE id > ultimoId ORDER BY id
  2.  

...o algo así.-

PD: deberías guardar el último id después de cada consulta.-
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #7 en: Jueves 8 de Febrero de 2007, 01:14 »
0
mmmm bueno, pero me parece que el quiere que vayan apereciendo de apoco osea de primero los primeros 1 al 5 luego del 6 al 10, 11 al 15  pero en el mismo QUERY .. eso creo..... :unsure:  tengo como que una solucion pero seria algo complicada... pero aun no la he analizado bien...  :ph34r: haber que tan optima la puedo llevar... :P
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #8 en: Jueves 8 de Febrero de 2007, 03:44 »
0
Cita de: "Angel_K_ido"
Me parece que lo que Lencho quiere es obtener los primeros n registros a partir de la posición k como permite hacerlo LIMIT n,k.-

No conozco la forma pero si tu tabla tiene una clave única numérica (id por ejemplo) podrías hacer uso del WHERE y el ORDER BY.

Código: Text
  1. SELECT TOP 5 * FROM Tabla WHERE id > ultimoId ORDER BY id
  2.  

...o algo así.-

PD: deberías guardar el último id después de cada consulta.-
Sip, eso es lo que quiero.
Segun el articulo solo PostgreSQL  y MySQL ofrecen esa funcion.

Buena idea, aunque solo serviria para campos numericos, y no asi por campos de tipo cadena.

BYTE
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Equivalente A Limit
« Respuesta #9 en: Jueves 8 de Febrero de 2007, 05:22 »
0
Cita de: "lencho"
Cita de: "Angel_K_ido"
Me parece que lo que Lencho quiere es obtener los primeros n registros a partir de la posición k como permite hacerlo LIMIT n,k.-

No conozco la forma pero si tu tabla tiene una clave única numérica (id por ejemplo) podrías hacer uso del WHERE y el ORDER BY.

Código: Text
  1. SELECT TOP 5 * FROM Tabla WHERE id > ultimoId ORDER BY id
  2.  

...o algo así.-

PD: deberías guardar el último id después de cada consulta.-
Sip, eso es lo que quiero.
Segun el articulo solo PostgreSQL  y MySQL ofrecen esa funcion.

Buena idea, aunque solo serviria para campos numericos, y no asi por campos de tipo cadena.

BYTE
Serviría para realizar paginación. La única restricción es que debe existir un campo numérico (Sería bueno un Autonumérico) por el cual ordenarías la consulta. Por lo demás si quisieras por ejemplo los 10 primeros clientes cuya localidad sea (Pozo del Molle  :P ) harías:
Código: Text
  1. SELECT TOP 10 * FROM CLIENTES WHERE Localidad='Pozo del Molle' ORDER BY codigoCliente;
  2.  
y si quisieras los 10 siguientes (suponiendo que el codigoCliente del último registro es 10 sería:
Código: Text
  1. SELECT TOP 10 * FROM CLIENTES WHERE Localidad='Pozo del Molle' AND codigoCliente>10 ORDER BY codigoCliente;
  2.  

Listo  :comp:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

A_LEX

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #10 en: Jueves 8 de Febrero de 2007, 15:33 »
0
Algo que puede ser útil al respecto, para lograr el efecto que se plantea.

Funcionalidad ROW_NUMBER ( ) -> Una Función de Ranking en SQL Server 2005

Cito el artículo completo ya que el foro no me permite publicar enlaces.  :angry:

Saludos.

Citar
Una de la novedades de SQL Server 2005 son las Funciones de Ranking que se usarán para analizar los datos obtenidos. Entre estas funciones de ranking tenemos, por ejemplo, la función ROW_NUMBER() que nos permite enumerar los resultados de una manera sencilla, es decir, nos devuelve el número secuencial para cada una de la filas de un conjunto de resultados , donde la primera fila es 1.
La sintaxis es:

                     ROW_NUMBER ( ) OVER ( [ partition_by_clause ] order_by_clause )
donde:

partition_by_clause: Divide el conjunto de resultados generado por la cláusula FROM en particiones a las que se aplica la función ROW_NUMBER.

order_by_clause: Determina el orden en el que se asigna el valor ROW_NUMBER a las filas de una partición
He aquí un ejemplo:

Esta consulta nos devolverá el ROW_NUMBER para los detalles de orden de venta en base al precio.

SELECT ROW_NUMBER() OVER( ORDER BY precio DESC ) AS nro, Cod_OrdenVenta, ID_Articulo , cant AS [Cantidad], precio
FROM Detalle_Orden_Venta

row    Cod_OrdenVenta     ID_Articulo  Cantidad     precio
------    ---------------                   ------------        --------------    -----------
1        00000015                     FX8S           1                7621.71
2        00000016                     FX8E           1                3601.77
3        00000016                     FX5P           1                 2207.87
4        00000014                     FX5G           1                 6507.82
5        00000018                     FX21            1                  631.62
6        00000019                     FX19            1                  751.62

NOTA: La cláusula OVER(ORDER BY DESC/ASC) debe usarse siempre que desee aprovecharse la funcionalidad de ROW_NUMBER, de no ser así, ROW_NUMBER no funcionará. :(


He aquí otro ejemplo, donde usamos la cláusula PARTITION para particionar resultados por el cod_grupoarticulo y luego a cada partición resultante se le aplica el ROW_NUMBER en base al stock_articulo, quedando así:

SELECT ROW_NUMBER() OVER(PARTITION BY cod_grupoarticulo ORDER BY stock_articulo ASC) AS NRO, cod_articulo,desc_articulo,cod_grupoarticulo,stock_articulo
FROM ARTICULO



NRO  cod_articulo    desc_articulo                     cod_grupoarticulo  stock_articulo
---- --------------- --------------------------------- -----------------  --------------
1    DS02            MAINBOARD 845 PEMYL               G003               -1
2    DS06            MAINBOARD 850 EV2                 G003               10
1    DS07            TECLADO 104 MULTIMEDIA32          G004               20
1    DS12            SWITCH 5 PORT 10/100, 220V        G006               26
1    DS45            MUEBLE DE OFICINA                 G007               34
1    DS76            DISCO DURO                        G008               20
1    DS07            IMPRESORA LASER                   G009               10
1    DS45            MEMORIA STICK                     G010               2
2    DS29            MEMORIA VIDEO                     G010               5
1    DS08            TINTA CANON BCI24 NEGRO           G011               12
1    DS41            WEB CAM ALTIOR MODELO B02         G012               0
1    DS74            MONITOR DE 15                     G016               6
1    DS83            IMPRESORA MATRICIAL DFX5001       G018               12
2    DS84            IMPRESORA MATRICIAL DFX8502       G018               17
3    DS21            IMPRESORA MATRICIAL FX21944       G018               48

(15 row(s) affected)


Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Equivalente A Limit
« Respuesta #11 en: Jueves 8 de Febrero de 2007, 15:55 »
0
Muy interesante  :yes:
Abría que ver que posibilidades nos trae esto  :comp:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #12 en: Jueves 8 de Febrero de 2007, 15:56 »
0
Muy cierto ......  :rolleyes:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #13 en: Jueves 8 de Febrero de 2007, 16:05 »
0
no le entiendo muy bien a lo que dice A_LEX

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Equivalente A Limit
« Respuesta #14 en: Jueves 8 de Febrero de 2007, 16:06 »
0
o sea que en sql server 2005 si se puede hacer la solución que planteaba la otra vez.

http://foros.solocodigo.com/index.php?show...c=26835&st=15&#
 :smartass:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #15 en: Jueves 8 de Febrero de 2007, 16:09 »
0
Si esque lo mejor hubiese sido que A_Lex  lo posteara en este post...

http://foros.solocodigo.com/index.php?show...c=26835&st=15&#
 :rolleyes:
pero lo bueno que hay solucion al problema.....  :comp:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



aicrag

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Equivalente A Limit
« Respuesta #16 en: Viernes 9 de Febrero de 2007, 00:09 »
0
buscando por ahi encontré este ejemplo, esta bastante bueno a mi parecer, espero sirva.  ;)

www.elguille.info/colabora/NET2006/sqlr ... Server.htm

lo que hace es explicar como hacer una paginación tanto en sqlServer 2005 como en el 2000.  B)
El sabio no es aquel que sabe donde esta el tesoro, sino el que trabaja y lo saca