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.-Sip, eso es lo que quiero.
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
SELECT TOP 5 * FROM Tabla WHERE id > ultimoId ORDER BY id
...o algo así.-
PD: deberías guardar el último id después de cada consulta.-
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: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.-Sip, eso es lo que quiero.
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
SELECT TOP 5 * FROM Tabla WHERE id > ultimoId ORDER BY id
...o algo así.-
PD: deberías guardar el último id después de cada consulta.-
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
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)