Select top

26/08/2004 - 22:45 por Julio | Informe spam
Hola grupo

Tengo la siguiente tabla

Tabla A1


ClienteID fecha prueba

1 01/01/04 0.50
1 01/02/04 0.25
1 01/03/04 0.71
2 01/01/04 0.3
2 01/02/04 0.9
2 01/03/04 0.6

Como puedo hacer una vista que me devuelva las ultimas dos fechas por
clientes

Preguntas similare

Leer las respuestas

#6 Javier Loria
27/08/2004 - 15:02 | Informe spam
Hola Julio:
En tu ejemplo no se repite ninguna fecha para un cliente, o sea que
ClienteID/Fecha es unica y no nula (candidata). Si es asi:
== SELECT T1.ClienteID
, T1Fecha
, T1.Prueba
FROM Tabla AS T1
JOIN Tabla AS T2
ON T1.Fecha<=T2.Fecha
GROUP BY T1.ClienteID
, T1.Fecha
, T1.Prueba
HAVING COUNT(*)<=3
= Espero te sirva,

Javier Loria
Costa Rica
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

"Julio" wrote in message
news:
Hola MAx, lo que necesito es que si un cliente tiene varios filas


insertada
me devuelva las ultimas N filas que yo necesite agrupados por clientes, es
decir si el
cliente 1 tiene cinco filas insertada y yo necesito las ultimas tres filas
que me la devuelva el select tanto para el cliente 1 como para todos.



esto es un ejemplo de lo que tiene la tabla

Clienteid fecha prueba
1 01/01/04 5
1 01/02/04 4
1 01/03/04 9
1 01/04/04 8
1 01/05/04 11
2 01/01/04 15
2 01/02/04 7
2 01/03/04 3
2 01/04/04 1
2 01/5/04 6


Yo quiero hacer un select que me devuelva los ultimas tre filas que se
insertaron

el select me quedaria asi:

Clienteid fecha prueba
1 01/03/04 9
1 01/04/04 8
1 01/05/04 11
2 01/03/04 3
2 01/04/04 1
2 01/05/04 6













"MAXI" wrote in message
news:%
> Hola, si solo te importan las fechas y suponiendo que si hay empates


vale
la
> ultima, podrias aplicar algo asi como:
>
> CREATE TABLE #PEPE (ID INT, FECHA DATETIME)
>
> INSERT INTO #PEPE VALUES (1,GETDATE())
> INSERT INTO #PEPE VALUES (1,GETDATE()+1)
> INSERT INTO #PEPE VALUES (1,GETDATE()+2)
> INSERT INTO #PEPE VALUES (2,GETDATE())
>
>
> SELECT PEP1.ID, PEP1.FECHA AS ULTIMA, (SELECT MAX(FECHA) FROM #PEPE PEP2
> WHERE
> PEP2.FECHA < PEP1.FECHA AND PEP1.ID = PEP2.ID) AS ANTEULTIMA
>
> FROM (select id,max(fecha) as fecha from #PEPE group by id)
> PEP1
>
> > >
> Suerte
>
>
>
>
> Maxi
>
> Buenos Aires - Argentina
> Desarrollador .NET 3 Estrellas
> Microsoft User Group (MUG)
> Mail: Maxi_accotto[arroba]speedy.com.ar
> Msn Messager:
>
> "Julio" escribió en el mensaje
> news:
> > Hola grupo
> >
> > Tengo la siguiente tabla
> >
> > Tabla A1
> >
> >
> > ClienteID fecha prueba
> >
> > 1 01/01/04 0.50
> > 1 01/02/04 0.25
> > 1 01/03/04 0.71
> > 2 01/01/04 0.3
> > 2 01/02/04 0.9
> > 2 01/03/04 0.6
> >
> > Como puedo hacer una vista que me devuelva las ultimas dos fechas por
> > clientes
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Maxi
27/08/2004 - 15:10 | Informe spam
wow, este me gusta mas :-D


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Javier Loria" escribió en el mensaje
news:%
Hola Julio:
En tu ejemplo no se repite ninguna fecha para un cliente, o sea que
ClienteID/Fecha es unica y no nula (candidata). Si es asi:
==> SELECT T1.ClienteID
, T1Fecha
, T1.Prueba
FROM Tabla AS T1
JOIN Tabla AS T2
ON T1.Fecha<=T2.Fecha
GROUP BY T1.ClienteID
, T1.Fecha
, T1.Prueba
HAVING COUNT(*)<=3
=> Espero te sirva,

Javier Loria
Costa Rica
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

"Julio" wrote in message
news:
> Hola MAx, lo que necesito es que si un cliente tiene varios filas
insertada
> me devuelva las ultimas N filas que yo necesite agrupados por clientes,


es
> decir si el
> cliente 1 tiene cinco filas insertada y yo necesito las ultimas tres


filas
> que me la devuelva el select tanto para el cliente 1 como para todos.
>
>
>
> esto es un ejemplo de lo que tiene la tabla
>
> Clienteid fecha prueba
> 1 01/01/04 5
> 1 01/02/04 4
> 1 01/03/04 9
> 1 01/04/04 8
> 1 01/05/04 11
> 2 01/01/04 15
> 2 01/02/04 7
> 2 01/03/04 3
> 2 01/04/04 1
> 2 01/5/04 6
>
>
> Yo quiero hacer un select que me devuelva los ultimas tre filas que se
> insertaron
>
> el select me quedaria asi:
>
> Clienteid fecha prueba
> 1 01/03/04 9
> 1 01/04/04 8
> 1 01/05/04 11
> 2 01/03/04 3
> 2 01/04/04 1
> 2 01/05/04 6
>
>
>
>
>
>
>
>
>
>
>
>
>
> "MAXI" wrote in message
> news:%
> > Hola, si solo te importan las fechas y suponiendo que si hay empates
vale
> la
> > ultima, podrias aplicar algo asi como:
> >
> > CREATE TABLE #PEPE (ID INT, FECHA DATETIME)
> >
> > INSERT INTO #PEPE VALUES (1,GETDATE())
> > INSERT INTO #PEPE VALUES (1,GETDATE()+1)
> > INSERT INTO #PEPE VALUES (1,GETDATE()+2)
> > INSERT INTO #PEPE VALUES (2,GETDATE())
> >
> >
> > SELECT PEP1.ID, PEP1.FECHA AS ULTIMA, (SELECT MAX(FECHA) FROM #PEPE


PEP2
> > WHERE
> > PEP2.FECHA < PEP1.FECHA AND PEP1.ID = PEP2.ID) AS ANTEULTIMA
> >
> > FROM (select id,max(fecha) as fecha from #PEPE group by id)
> > PEP1
> >
> > > > >
> > Suerte
> >
> >
> >
> >
> > Maxi
> >
> > Buenos Aires - Argentina
> > Desarrollador .NET 3 Estrellas
> > Microsoft User Group (MUG)
> > Mail: Maxi_accotto[arroba]speedy.com.ar
> > Msn Messager:
> >
> > "Julio" escribió en el mensaje
> > news:
> > > Hola grupo
> > >
> > > Tengo la siguiente tabla
> > >
> > > Tabla A1
> > >
> > >
> > > ClienteID fecha prueba
> > >
> > > 1 01/01/04 0.50
> > > 1 01/02/04 0.25
> > > 1 01/03/04 0.71
> > > 2 01/01/04 0.3
> > > 2 01/02/04 0.9
> > > 2 01/03/04 0.6
> > >
> > > Como puedo hacer una vista que me devuelva las ultimas dos fechas


por
> > > clientes
> > >
> > >
> >
> >
>
>







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.740 / Virus Database: 494 - Release Date: 16/08/2004
Respuesta Responder a este mensaje
#8 Julio
27/08/2004 - 16:34 | Informe spam
Hola Javier en tu ejemplo solo me esta agrupando un solo cliente y es el que
tiene la fecha mas alta, es decir yo necesito que lo haga por cliente




"Javier Loria" wrote in message
news:%
Hola Julio:
En tu ejemplo no se repite ninguna fecha para un cliente, o sea que
ClienteID/Fecha es unica y no nula (candidata). Si es asi:
==> SELECT T1.ClienteID
, T1Fecha
, T1.Prueba
FROM Tabla AS T1
JOIN Tabla AS T2
ON T1.Fecha<=T2.Fecha
GROUP BY T1.ClienteID
, T1.Fecha
, T1.Prueba
HAVING COUNT(*)<=3
=> Espero te sirva,

Javier Loria
Costa Rica
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

"Julio" wrote in message
news:
> Hola MAx, lo que necesito es que si un cliente tiene varios filas
insertada
> me devuelva las ultimas N filas que yo necesite agrupados por clientes,


es
> decir si el
> cliente 1 tiene cinco filas insertada y yo necesito las ultimas tres


filas
> que me la devuelva el select tanto para el cliente 1 como para todos.
>
>
>
> esto es un ejemplo de lo que tiene la tabla
>
> Clienteid fecha prueba
> 1 01/01/04 5
> 1 01/02/04 4
> 1 01/03/04 9
> 1 01/04/04 8
> 1 01/05/04 11
> 2 01/01/04 15
> 2 01/02/04 7
> 2 01/03/04 3
> 2 01/04/04 1
> 2 01/5/04 6
>
>
> Yo quiero hacer un select que me devuelva los ultimas tre filas que se
> insertaron
>
> el select me quedaria asi:
>
> Clienteid fecha prueba
> 1 01/03/04 9
> 1 01/04/04 8
> 1 01/05/04 11
> 2 01/03/04 3
> 2 01/04/04 1
> 2 01/05/04 6
>
>
>
>
>
>
>
>
>
>
>
>
>
> "MAXI" wrote in message
> news:%
> > Hola, si solo te importan las fechas y suponiendo que si hay empates
vale
> la
> > ultima, podrias aplicar algo asi como:
> >
> > CREATE TABLE #PEPE (ID INT, FECHA DATETIME)
> >
> > INSERT INTO #PEPE VALUES (1,GETDATE())
> > INSERT INTO #PEPE VALUES (1,GETDATE()+1)
> > INSERT INTO #PEPE VALUES (1,GETDATE()+2)
> > INSERT INTO #PEPE VALUES (2,GETDATE())
> >
> >
> > SELECT PEP1.ID, PEP1.FECHA AS ULTIMA, (SELECT MAX(FECHA) FROM #PEPE


PEP2
> > WHERE
> > PEP2.FECHA < PEP1.FECHA AND PEP1.ID = PEP2.ID) AS ANTEULTIMA
> >
> > FROM (select id,max(fecha) as fecha from #PEPE group by id)
> > PEP1
> >
> > > > >
> > Suerte
> >
> >
> >
> >
> > Maxi
> >
> > Buenos Aires - Argentina
> > Desarrollador .NET 3 Estrellas
> > Microsoft User Group (MUG)
> > Mail: Maxi_accotto[arroba]speedy.com.ar
> > Msn Messager:
> >
> > "Julio" escribió en el mensaje
> > news:
> > > Hola grupo
> > >
> > > Tengo la siguiente tabla
> > >
> > > Tabla A1
> > >
> > >
> > > ClienteID fecha prueba
> > >
> > > 1 01/01/04 0.50
> > > 1 01/02/04 0.25
> > > 1 01/03/04 0.71
> > > 2 01/01/04 0.3
> > > 2 01/02/04 0.9
> > > 2 01/03/04 0.6
> > >
> > > Como puedo hacer una vista que me devuelva las ultimas dos fechas


por
> > > clientes
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#9 Maxi
27/08/2004 - 17:04 | Informe spam
Hola, revisalo bien el ejemplo que te mando Javier, pero te lo hace para
todos los clientes y no solo para uno, porque dices eso?


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Julio" escribió en el mensaje
news:%
Hola Javier en tu ejemplo solo me esta agrupando un solo cliente y es el


que
tiene la fecha mas alta, es decir yo necesito que lo haga por cliente




"Javier Loria" wrote in message
news:%
> Hola Julio:
> En tu ejemplo no se repite ninguna fecha para un cliente, o sea que
> ClienteID/Fecha es unica y no nula (candidata). Si es asi:
> ==> > SELECT T1.ClienteID
> , T1Fecha
> , T1.Prueba
> FROM Tabla AS T1
> JOIN Tabla AS T2
> ON T1.Fecha<=T2.Fecha
> GROUP BY T1.ClienteID
> , T1.Fecha
> , T1.Prueba
> HAVING COUNT(*)<=3
> => > Espero te sirva,
>
> Javier Loria
> Costa Rica
> 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
>
> "Julio" wrote in message
> news:
> > Hola MAx, lo que necesito es que si un cliente tiene varios filas
> insertada
> > me devuelva las ultimas N filas que yo necesite agrupados por


clientes,
es
> > decir si el
> > cliente 1 tiene cinco filas insertada y yo necesito las ultimas tres
filas
> > que me la devuelva el select tanto para el cliente 1 como para todos.
> >
> >
> >
> > esto es un ejemplo de lo que tiene la tabla
> >
> > Clienteid fecha prueba
> > 1 01/01/04 5
> > 1 01/02/04 4
> > 1 01/03/04 9
> > 1 01/04/04 8
> > 1 01/05/04 11
> > 2 01/01/04 15
> > 2 01/02/04 7
> > 2 01/03/04 3
> > 2 01/04/04 1
> > 2 01/5/04 6
> >
> >
> > Yo quiero hacer un select que me devuelva los ultimas tre filas que se
> > insertaron
> >
> > el select me quedaria asi:
> >
> > Clienteid fecha prueba
> > 1 01/03/04 9
> > 1 01/04/04 8
> > 1 01/05/04 11
> > 2 01/03/04 3
> > 2 01/04/04 1
> > 2 01/05/04 6
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > "MAXI" wrote in message
> > news:%
> > > Hola, si solo te importan las fechas y suponiendo que si hay empates
> vale
> > la
> > > ultima, podrias aplicar algo asi como:
> > >
> > > CREATE TABLE #PEPE (ID INT, FECHA DATETIME)
> > >
> > > INSERT INTO #PEPE VALUES (1,GETDATE())
> > > INSERT INTO #PEPE VALUES (1,GETDATE()+1)
> > > INSERT INTO #PEPE VALUES (1,GETDATE()+2)
> > > INSERT INTO #PEPE VALUES (2,GETDATE())
> > >
> > >
> > > SELECT PEP1.ID, PEP1.FECHA AS ULTIMA, (SELECT MAX(FECHA) FROM #PEPE
PEP2
> > > WHERE
> > > PEP2.FECHA < PEP1.FECHA AND PEP1.ID = PEP2.ID) AS ANTEULTIMA
> > >
> > > FROM (select id,max(fecha) as fecha from #PEPE group by id)
> > > PEP1
> > >
> > > > > > >
> > > Suerte
> > >
> > >
> > >
> > >
> > > Maxi
> > >
> > > Buenos Aires - Argentina
> > > Desarrollador .NET 3 Estrellas
> > > Microsoft User Group (MUG)
> > > Mail: Maxi_accotto[arroba]speedy.com.ar
> > > Msn Messager:
> > >
> > > "Julio" escribió en el mensaje
> > > news:
> > > > Hola grupo
> > > >
> > > > Tengo la siguiente tabla
> > > >
> > > > Tabla A1
> > > >
> > > >
> > > > ClienteID fecha prueba
> > > >
> > > > 1 01/01/04 0.50
> > > > 1 01/02/04 0.25
> > > > 1 01/03/04 0.71
> > > > 2 01/01/04 0.3
> > > > 2 01/02/04 0.9
> > > > 2 01/03/04 0.6
> > > >
> > > > Como puedo hacer una vista que me devuelva las ultimas dos fechas
por
> > > > clientes
> > > >
> > > >
> > >
> > >
> >
> >
>
>







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.740 / Virus Database: 494 - Release Date: 16/08/2004
Respuesta Responder a este mensaje
#10 Julio
27/08/2004 - 17:10 | Informe spam
Tengo varios filas insertada por cliente y cuando lo corro solo me devuelve
el cliente que tien la fecha mas grande



"Maxi" wrote in message
news:
Hola, revisalo bien el ejemplo que te mando Javier, pero te lo hace para
todos los clientes y no solo para uno, porque dices eso?


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Julio" escribió en el mensaje
news:%
> Hola Javier en tu ejemplo solo me esta agrupando un solo cliente y es el
que
> tiene la fecha mas alta, es decir yo necesito que lo haga por cliente
>
>
>
>
> "Javier Loria" wrote in message
> news:%
> > Hola Julio:
> > En tu ejemplo no se repite ninguna fecha para un cliente, o sea


que
> > ClienteID/Fecha es unica y no nula (candidata). Si es asi:
> > ==> > > SELECT T1.ClienteID
> > , T1Fecha
> > , T1.Prueba
> > FROM Tabla AS T1
> > JOIN Tabla AS T2
> > ON T1.Fecha<=T2.Fecha
> > GROUP BY T1.ClienteID
> > , T1.Fecha
> > , T1.Prueba
> > HAVING COUNT(*)<=3
> > => > > Espero te sirva,
> >
> > Javier Loria
> > Costa Rica
> > 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
> >
> > "Julio" wrote in message
> > news:
> > > Hola MAx, lo que necesito es que si un cliente tiene varios filas
> > insertada
> > > me devuelva las ultimas N filas que yo necesite agrupados por
clientes,
> es
> > > decir si el
> > > cliente 1 tiene cinco filas insertada y yo necesito las ultimas tres
> filas
> > > que me la devuelva el select tanto para el cliente 1 como para


todos.
> > >
> > >
> > >
> > > esto es un ejemplo de lo que tiene la tabla
> > >
> > > Clienteid fecha prueba
> > > 1 01/01/04 5
> > > 1 01/02/04 4
> > > 1 01/03/04 9
> > > 1 01/04/04 8
> > > 1 01/05/04 11
> > > 2 01/01/04 15
> > > 2 01/02/04 7
> > > 2 01/03/04 3
> > > 2 01/04/04 1
> > > 2 01/5/04 6
> > >
> > >
> > > Yo quiero hacer un select que me devuelva los ultimas tre filas que


se
> > > insertaron
> > >
> > > el select me quedaria asi:
> > >
> > > Clienteid fecha prueba
> > > 1 01/03/04 9
> > > 1 01/04/04 8
> > > 1 01/05/04 11
> > > 2 01/03/04 3
> > > 2 01/04/04 1
> > > 2 01/05/04 6
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > "MAXI" wrote in message
> > > news:%
> > > > Hola, si solo te importan las fechas y suponiendo que si hay


empates
> > vale
> > > la
> > > > ultima, podrias aplicar algo asi como:
> > > >
> > > > CREATE TABLE #PEPE (ID INT, FECHA DATETIME)
> > > >
> > > > INSERT INTO #PEPE VALUES (1,GETDATE())
> > > > INSERT INTO #PEPE VALUES (1,GETDATE()+1)
> > > > INSERT INTO #PEPE VALUES (1,GETDATE()+2)
> > > > INSERT INTO #PEPE VALUES (2,GETDATE())
> > > >
> > > >
> > > > SELECT PEP1.ID, PEP1.FECHA AS ULTIMA, (SELECT MAX(FECHA) FROM


#PEPE
> PEP2
> > > > WHERE
> > > > PEP2.FECHA < PEP1.FECHA AND PEP1.ID = PEP2.ID) AS ANTEULTIMA
> > > >
> > > > FROM (select id,max(fecha) as fecha from #PEPE group by id)
> > > > PEP1
> > > >
> > > > > > > > >
> > > > Suerte
> > > >
> > > >
> > > >
> > > >
> > > > Maxi
> > > >
> > > > Buenos Aires - Argentina
> > > > Desarrollador .NET 3 Estrellas
> > > > Microsoft User Group (MUG)
> > > > Mail: Maxi_accotto[arroba]speedy.com.ar
> > > > Msn Messager:
> > > >
> > > > "Julio" escribió en el mensaje
> > > > news:
> > > > > Hola grupo
> > > > >
> > > > > Tengo la siguiente tabla
> > > > >
> > > > > Tabla A1
> > > > >
> > > > >
> > > > > ClienteID fecha prueba
> > > > >
> > > > > 1 01/01/04 0.50
> > > > > 1 01/02/04 0.25
> > > > > 1 01/03/04 0.71
> > > > > 2 01/01/04 0.3
> > > > > 2 01/02/04 0.9
> > > > > 2 01/03/04 0.6
> > > > >
> > > > > Como puedo hacer una vista que me devuelva las ultimas dos


fechas
> por
> > > > > clientes
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.740 / Virus Database: 494 - Release Date: 16/08/2004


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida