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

#11 Julio
27/08/2004 - 17:13 | Informe spam
Esta es la tabla

CREATE TABLE [dbo].[Consumo] (
[ConsumoID] [int] IDENTITY (1, 1) NOT NULL ,
[ClienteID] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL ,
[Energia] [decimal](18, 2) NULL ,
[Reactiva] [decimal](18, 2) NULL ,
[Potencia] [decimal](18, 2) NULL ,
[Potencia_punta] [decimal](18, 2) NULL ,
[Mes] AS (case (datepart(month,[fecha])) when '01' then 'Enero' when '02'
then 'Febrero' when '03' then 'Marzo' when '04' then 'Abril' when '05' then
'Mayo' when '06' then 'Junio' when '07' then 'Julio' when '08' then 'Agosto'
when '09' then 'Septiembre' when '10' then 'Octubre' when '11' then
'Noviembre' when '12' then 'Diciembre' end) ,
[Año] AS (datename(year,[fecha])) ,
[FechaInsertacion] [datetime] NULL ,
[Usuario] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]


Este es el codigo

SELECT t1.ClienteID
, t1.Fecha
, T1.Potencia
FROM Consumo AS T1
JOIN Consumo AS T2
ON T1.Fecha<=T2.Fecha
GROUP BY T1.ClienteID
, T1.Fecha
, T1.Potencia
HAVING COUNT(*)<=1





"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
#12 Liliana Sorrentino
27/08/2004 - 17:21 | Informe spam
Julio,
solo cambiá
ON T1.Fecha<=T2.Fecha
por
ON t1.clienteid = t2.clienteid and T1.Fecha<=T2.Fecha

Liliana.

"Julio" escribió en el mensaje
news:
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
#13 Maxi
27/08/2004 - 17:21 | Informe spam
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 (1,GETDATE()+3)
INSERT INTO #PEPE VALUES (1,GETDATE()+4)
INSERT INTO #PEPE VALUES (2,GETDATE())
INSERT INTO #PEPE VALUES (2,GETDATE()+10)
INSERT INTO #PEPE VALUES (2,GETDATE()+20)
INSERT INTO #PEPE VALUES (2,GETDATE()+30)

go

SELECT T1.ID,T1.FECHA FROM #PEPE T1 INNER JOIN #PEPE T2 ON
T1.ID = T2.ID AND T1.FECHA <= T2.FECHA
GROUP BY T1.ID,T1.FECHA
HAVING COUNT(*) <=3
ORDER BY T1.ID,T1.FECHA DESC





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:
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
>
>







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
#14 Javier Loria
27/08/2004 - 17:27 | Informe spam
Hola Liliana:
Exacto!!!
Mil Disculpas,

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

"Liliana Sorrentino" wrote in message
news:
Julio,
solo cambiá
ON T1.Fecha<=T2.Fecha
por
ON t1.clienteid = t2.clienteid and T1.Fecha<=T2.Fecha

Liliana.

"Julio" escribió en el mensaje
news:
> 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
#15 Julio
27/08/2004 - 17:32 | Informe spam
Gracias Max,Liliana,Javier ya funciona bien

Ya tengo creada una vista de la consulta de las n filas que necesitavas que
es la siguiente:

Create view Ultimos12
as
SELECT t1.ClienteID
, t1.Fecha
, T1.Potencia
FROM Consumo AS T1
JOIN Consumo AS T2
ON t1.clienteid = t2.clienteid and T1.Fecha<=T2.Fecha
GROUP BY T1.ClienteID
, T1.Fecha
, T1.Potencia
HAVING COUNT(*)<=2

Ahora bien necesito crear otra vista que me calcule el promedio de las dos
lectura mas grande sin tomar el cuenta la fila mas reciente es decir la
ultima fila que se inserto.

Vista Ultimos12
ConsumoID Potencia Secuencia ClienteID Fecha
1588 8 1 1
2004-08-07
1587 9 2 1
2004-09-07
1586 6 3 1
2004-10-07
1502 4 4 1
2004-11-05
1589 5 1 24
2004-04-05
1505 3 2 24
2004-05-07
1504 7 3 24
2004-06-06
1503 2 4 24
2004-07-05

Esta seria la vista

Potencia Secuencia ClienteID
8.5 1 1
6 4 24


El clienteID 1 los dos mas alto son 8+9 / 2 = 8.5
El clienteID 24 los dos mas alto son 7+2 / 2 = 6














"Maxi" wrote in message
news:
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida