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

Preguntas similare

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




Respuesta Responder a este mensaje
#2 José Luis Capel - Aicom
25/04/2007 - 13:52 | Informe spam
Javier,

Gracias por tu respuesta.

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,




Quiero mostrar los 'n' últimos documentos de cada cliente. Suponiendo que
quisiera mostrar los 2 últimos documentos de cada cliente el resultado sería
el siguiente:

cliente documento
= =cliente1 58
cliente1 19
cliente2 18
cliente3 25
cliente3 02

Saludos y gracias por tu ayuda.
José Luis Capel
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida