Consulta SELECT top ....

25/04/2007 - 12:44 por José Luis Capel - Aicom | Informe spam
Hola,

Pido disculpas de antemano por esta cuestión básica pero no se como
sacarla.

Suponiendo una tabla como la que sigue:

CREATE TABLE [dbo].[test] (
[documento]char(10) COLLATE Modern_Spanish_CI_AS NOT NULL,
[cliente]char(10) COLLATE Modern_Spanish_CI_AS NOT NULL,
[fecha]datetime NOT NULL,
[importe]numeric(18, 0) NOT NULL,
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED ([documento], [cliente])
)
ON [PRIMARY]
GO


Y estos datos:

INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('02', 'cliente3', '20740415', 48);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('10', 'cliente1', '20070401', 15);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('14', 'cliente1', '20070402', 48);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('18', 'cliente2', '20070110', 14);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('19', 'cliente1', '20070210', 15);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('25', 'cliente3', '20070401', 14);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('58', 'cliente1', '20070102', 41);

Me gustaría obtener de una lista ordenada por cliente ASC ,documento DESC
las primeras n filas de cada cliente.

Por poner un ejemplo, con los datos de arriba, quisiera obtener este
resultado

cliente documento
cliente1 58
cliente2 18
cliente3 25

En este caso quiero mostrar la primera fila de cada cliente.

¿Cómo podría ser el SElect?

Muchísimas gracias por vuestra ayuda.
José Luis Capel
 

Leer las respuestas

#1 Javier Loria
25/04/2007 - 13:30 | Informe spam
Hola Jose Luis:
Muchas gracias por tomarte el tiempo por enviarnos el DDL y los
comandos, esto hace que sea mas facil contestarte y menos probable que
cometamos errores cuando enviamos las respuestas.
Si lo unico que quieres es el ultimo entonces puedes utilizar el MAX
para obtener dicho valor, en tu caso:
SELECT [cliente], MAX([documento]) as documento
FROM [dbo].[test]
GROUP BY [cliente]
Espero te sirva,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


"José Luis Capel - Aicom" wrote in message
news:
Hola,

Pido disculpas de antemano por esta cuestión básica pero no se como
sacarla.

Suponiendo una tabla como la que sigue:

CREATE TABLE [dbo].[test] (
[documento]char(10) COLLATE Modern_Spanish_CI_AS NOT NULL,
[cliente]char(10) COLLATE Modern_Spanish_CI_AS NOT NULL,
[fecha]datetime NOT NULL,
[importe]numeric(18, 0) NOT NULL,
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED ([documento], [cliente])
)
ON [PRIMARY]
GO


Y estos datos:

INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('02', 'cliente3', '20740415', 48);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('10', 'cliente1', '20070401', 15);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('14', 'cliente1', '20070402', 48);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('18', 'cliente2', '20070110', 14);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('19', 'cliente1', '20070210', 15);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('25', 'cliente3', '20070401', 14);
INSERT INTO [dbo].[test] ([documento], [cliente], [fecha], [importe])
VALUES ('58', 'cliente1', '20070102', 41);

Me gustaría obtener de una lista ordenada por cliente ASC ,documento DESC
las primeras n filas de cada cliente.

Por poner un ejemplo, con los datos de arriba, quisiera obtener este
resultado

cliente documento
cliente1 58
cliente2 18
cliente3 25

En este caso quiero mostrar la primera fila de cada cliente.

¿Cómo podría ser el SElect?

Muchísimas gracias por vuestra ayuda.
José Luis Capel




Preguntas similares