Construcción de una QUERY

30/10/2006 - 17:49 por PedroJ | Informe spam
Hola, os agradecería enormemente que me ayudeis a construir una QUERY
con los siguientes requisitos:
Se hace sobre una tabla con los siguientes campos:
IdCobro
FechaCobro
ImporteCobro
NumeroContrato

Pues bien, necesito una vista con el IdCobro que corresponda al valor
más pequeño de FechaCobro para cada NumeroContrato, vamos, el IdCobro
del primer cobro realizado (atención, que no tiene por qué conincidir
con el IdCobro más bajo para cada NumeroContrato).

Gracias a todos y un saludo.
PedroJ.

Preguntas similare

Leer las respuestas

#1 Maxi
30/10/2006 - 18:01 | Informe spam
Pedro, la verdad que es complicado ayudarte asi, podes pasarnos algun
detalle de datos y como deberia quedar la query? que tipo de datos son esos
que has mencionado?


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"PedroJ" escribió en el mensaje
news:
Hola, os agradecería enormemente que me ayudeis a construir una QUERY
con los siguientes requisitos:
Se hace sobre una tabla con los siguientes campos:
IdCobro
FechaCobro
ImporteCobro
NumeroContrato

Pues bien, necesito una vista con el IdCobro que corresponda al valor
más pequeño de FechaCobro para cada NumeroContrato, vamos, el IdCobro
del primer cobro realizado (atención, que no tiene por qué conincidir
con el IdCobro más bajo para cada NumeroContrato).

Gracias a todos y un saludo.
PedroJ.
Respuesta Responder a este mensaje
#2 PedroJ
30/10/2006 - 18:29 | Informe spam
A ver, no es complicada la explicación. Voy...
Tabla:
IdCobro: int
FechaCobro : smalldatetime
ImporteCobro: money
NumeroContrato: int

Ejemplo de datos:
IdCobro FechaCobro ImporteCobro NumeroContrato
1 10/01/2006 25
25
2 30/05/2006 60
50
3 10/01/2006 80
25
4 20/06/2006 50
50


Resultado deseado obtener:
IdCobro FechaCobro ImporteCobro NumeroContrato
3 10/01/2006 80
25
2 30/05/2006 60
50

Es decir, el primer cobro realizado (según FechaCobro) de cada
contrato.

Espero haberme explicado con mayor claridad.

Un saludo.
Pedro J.



Maxi ha escrito:

Pedro, la verdad que es complicado ayudarte asi, podes pasarnos algun
detalle de datos y como deberia quedar la query? que tipo de datos son esos
que has mencionado?


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"PedroJ" escribió en el mensaje
news:
Hola, os agradecería enormemente que me ayudeis a construir una QUERY
con los siguientes requisitos:
Se hace sobre una tabla con los siguientes campos:
IdCobro
FechaCobro
ImporteCobro
NumeroContrato

Pues bien, necesito una vista con el IdCobro que corresponda al valor
más pequeño de FechaCobro para cada NumeroContrato, vamos, el IdCobro
del primer cobro realizado (atención, que no tiene por qué conincidir
con el IdCobro más bajo para cada NumeroContrato).

Gracias a todos y un saludo.
PedroJ.
Respuesta Responder a este mensaje
#3 PedroJ
30/10/2006 - 18:33 | Informe spam
CORRECCIÓN A LOS DATOS DADOS
Los ejemplos deben ser:
IdCobro FechaCobro ImporteCobro NumeroContrato
1 10/01/2006 25 25
2 30/05/2006 60 50
3 01/01/2006 80 25
4 20/06/2006 50 50

Y el resultado debe ser:
IdCobro FechaCobro ImporteCobro NumeroContrato
3 01/01/2006 80 25
2 30/05/2006 60 50

Perdón, una fecha la puse mal.

Un saludo.
Pedro J.


PedroJ ha escrito:

A ver, no es complicada la explicación. Voy...
Tabla:
IdCobro: int
FechaCobro : smalldatetime
ImporteCobro: money
NumeroContrato: int

Ejemplo de datos:
IdCobro FechaCobro ImporteCobro NumeroContrato
1 10/01/2006 25
25
2 30/05/2006 60
50
3 10/01/2006 80
25
4 20/06/2006 50
50


Resultado deseado obtener:
IdCobro FechaCobro ImporteCobro NumeroContrato
3 10/01/2006 80
25
2 30/05/2006 60
50

Es decir, el primer cobro realizado (según FechaCobro) de cada
contrato.

Espero haberme explicado con mayor claridad.

Un saludo.
Pedro J.



Maxi ha escrito:

> Pedro, la verdad que es complicado ayudarte asi, podes pasarnos algun
> detalle de datos y como deberia quedar la query? que tipo de datos son esos
> que has mencionado?
>
>
> Salu2
>
> Microsoft MVP SQL Server
> Culminis Speaker
> INETA Speaker
>
> "PedroJ" escribió en el mensaje
> news:
> Hola, os agradecería enormemente que me ayudeis a construir una QUERY
> con los siguientes requisitos:
> Se hace sobre una tabla con los siguientes campos:
> IdCobro
> FechaCobro
> ImporteCobro
> NumeroContrato
>
> Pues bien, necesito una vista con el IdCobro que corresponda al valor
> más pequeño de FechaCobro para cada NumeroContrato, vamos, el IdCobro
> del primer cobro realizado (atención, que no tiene por qué conincidir
> con el IdCobro más bajo para cada NumeroContrato).
>
> Gracias a todos y un saludo.
> PedroJ.
Respuesta Responder a este mensaje
#4 Alejandro Mesa
30/10/2006 - 19:40 | Informe spam
Trata:

1 -

select a.*
from dbo.t1 as a
where not exists (
select *
from dbo.t1 as b
where b.NumeroContrato = a.NumeroContrato
and b.FechaCobro < a.FechaCobro
)
go

2 -

select a.*
from dbo.t1 as a inner join
(
select c.NumeroContrato, max(c.FechaCobro) as max_FechaCobro
from dbo.t1 as c
group by c.NumeroContrato
) as b
on a.NumeroContrato = b.NumeroContrato
and a.FechaCobro = b.max_FechaCobro
go


AMB

"PedroJ" wrote:

CORRECCIÓN A LOS DATOS DADOS
Los ejemplos deben ser:
IdCobro FechaCobro ImporteCobro NumeroContrato
1 10/01/2006 25 25
2 30/05/2006 60 50
3 01/01/2006 80 25
4 20/06/2006 50 50

Y el resultado debe ser:
IdCobro FechaCobro ImporteCobro NumeroContrato
3 01/01/2006 80 25
2 30/05/2006 60 50

Perdón, una fecha la puse mal.

Un saludo.
Pedro J.


PedroJ ha escrito:

> A ver, no es complicada la explicación. Voy...
> Tabla:
> IdCobro: int
> FechaCobro : smalldatetime
> ImporteCobro: money
> NumeroContrato: int
>
> Ejemplo de datos:
> IdCobro FechaCobro ImporteCobro NumeroContrato
> 1 10/01/2006 25
> 25
> 2 30/05/2006 60
> 50
> 3 10/01/2006 80
> 25
> 4 20/06/2006 50
> 50
>
>
> Resultado deseado obtener:
> IdCobro FechaCobro ImporteCobro NumeroContrato
> 3 10/01/2006 80
> 25
> 2 30/05/2006 60
> 50
>
> Es decir, el primer cobro realizado (según FechaCobro) de cada
> contrato.
>
> Espero haberme explicado con mayor claridad.
>
> Un saludo.
> Pedro J.
>
>
>
> Maxi ha escrito:
>
> > Pedro, la verdad que es complicado ayudarte asi, podes pasarnos algun
> > detalle de datos y como deberia quedar la query? que tipo de datos son esos
> > que has mencionado?
> >
> >
> > Salu2
> >
> > Microsoft MVP SQL Server
> > Culminis Speaker
> > INETA Speaker
> >
> > "PedroJ" escribió en el mensaje
> > news:
> > Hola, os agradecería enormemente que me ayudeis a construir una QUERY
> > con los siguientes requisitos:
> > Se hace sobre una tabla con los siguientes campos:
> > IdCobro
> > FechaCobro
> > ImporteCobro
> > NumeroContrato
> >
> > Pues bien, necesito una vista con el IdCobro que corresponda al valor
> > más pequeño de FechaCobro para cada NumeroContrato, vamos, el IdCobro
> > del primer cobro realizado (atención, que no tiene por qué conincidir
> > con el IdCobro más bajo para cada NumeroContrato).
> >
> > Gracias a todos y un saludo.
> > PedroJ.


Respuesta Responder a este mensaje
#5 PedroJ
31/10/2006 - 10:49 | Informe spam
PERFECTO ALEJANDRO, muchas gracias, sólo un par de puntualizaciones.

1. Por si alguien copia y pega sin comprobar, en la solucón 2, cambiar
donde pone max(c.FechaCobro) por min(c.FechaCobro).
2. Un problema adicional ("mea culpa", no lo especifiqué). Puede
suceder que haya DOS O MÁS cobros con la misma fecha, en cuyo caso
debe aparecer el que tenga el IDCobro más bajo de los que son de la
misma fecha (mira que complico las cosas).

Lo dicho, muchas gracias y un saludo.

Pedro J.


Alejandro Mesa ha escrito:

Trata:

1 -

select a.*
from dbo.t1 as a
where not exists (
select *
from dbo.t1 as b
where b.NumeroContrato = a.NumeroContrato
and b.FechaCobro < a.FechaCobro
)
go

2 -

select a.*
from dbo.t1 as a inner join
(
select c.NumeroContrato, max(c.FechaCobro) as max_FechaCobro
from dbo.t1 as c
group by c.NumeroContrato
) as b
on a.NumeroContrato = b.NumeroContrato
and a.FechaCobro = b.max_FechaCobro
go


AMB

"PedroJ" wrote:

> CORRECCIÓN A LOS DATOS DADOS
> Los ejemplos deben ser:
> IdCobro FechaCobro ImporteCobro NumeroContrato
> 1 10/01/2006 25 25
> 2 30/05/2006 60 50
> 3 01/01/2006 80 25
> 4 20/06/2006 50 50
>
> Y el resultado debe ser:
> IdCobro FechaCobro ImporteCobro NumeroContrato
> 3 01/01/2006 80 25
> 2 30/05/2006 60 50
>
> Perdón, una fecha la puse mal.
>
> Un saludo.
> Pedro J.
>
>
> PedroJ ha escrito:
>
> > A ver, no es complicada la explicación. Voy...
> > Tabla:
> > IdCobro: int
> > FechaCobro : smalldatetime
> > ImporteCobro: money
> > NumeroContrato: int
> >
> > Ejemplo de datos:
> > IdCobro FechaCobro ImporteCobro NumeroContrato
> > 1 10/01/2006 25
> > 25
> > 2 30/05/2006 60
> > 50
> > 3 10/01/2006 80
> > 25
> > 4 20/06/2006 50
> > 50
> >
> >
> > Resultado deseado obtener:
> > IdCobro FechaCobro ImporteCobro NumeroContrato
> > 3 10/01/2006 80
> > 25
> > 2 30/05/2006 60
> > 50
> >
> > Es decir, el primer cobro realizado (según FechaCobro) de cada
> > contrato.
> >
> > Espero haberme explicado con mayor claridad.
> >
> > Un saludo.
> > Pedro J.
> >
> >
> >
> > Maxi ha escrito:
> >
> > > Pedro, la verdad que es complicado ayudarte asi, podes pasarnos algun
> > > detalle de datos y como deberia quedar la query? que tipo de datos son esos
> > > que has mencionado?
> > >
> > >
> > > Salu2
> > >
> > > Microsoft MVP SQL Server
> > > Culminis Speaker
> > > INETA Speaker
> > >
> > > "PedroJ" escribió en el mensaje
> > > news:
> > > Hola, os agradecería enormemente que me ayudeis a construir una QUERY
> > > con los siguientes requisitos:
> > > Se hace sobre una tabla con los siguientes campos:
> > > IdCobro
> > > FechaCobro
> > > ImporteCobro
> > > NumeroContrato
> > >
> > > Pues bien, necesito una vista con el IdCobro que corresponda al valor
> > > más pequeño de FechaCobro para cada NumeroContrato, vamos, el IdCobro
> > > del primer cobro realizado (atención, que no tiene por qué conincidir
> > > con el IdCobro más bajo para cada NumeroContrato).
> > >
> > > Gracias a todos y un saludo.
> > > PedroJ.
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida