Prgunta SQL

31/10/2007 - 14:47 por Robert Barreiro | Informe spam
Hola que tal muchachos?

Esta es una pregunta de SQL mas bien y se que este no es el foro, pero no
quiero subscribirme a otro mas y de paso seguro que aca hay alguno que se ha
enfrentado a algo asi. El tema es el siguiente:

Tengo una tabla en donde se guardan las cotizaciones de cada fecha de la
moneda local frente al dolar americano. El rango de fechas es de unos 16
años, pero para algunos dias no tenemos datos, es decir, las fechas se van
saltando. La consulta es que dado una fecha y un codigo de moneda te
devuelve la cotizacion. El tema es que yo muchas veces no tengo la
cotizacion del dia exacto, pero si la de dos o tres dias despues o del día
anterior.

Pregunta: existe alguna forma mediante sql (uniones, algo asi) en donde yo
pueda obtener la cotizacion de la fecha que estoy buscando, pero si no
existe que me retorne automaticamente el mas cercano o algo por el estilo.

Alguno tiene una idea aproximada por donde se puede encarar esto? Agradezco
mucho su ayuda y nuevamente pido disculpas por utilizar este foro (aunque la
aplicacion la estoy desarrollando en C#, así que tan mal no esta :D)


Saludos

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
31/10/2007 - 14:04 | Informe spam
On Wed, 31 Oct 2007 10:47:07 -0300, "Robert Barreiro"
wrote:

Esta es una pregunta de SQL mas bien y se que este no es el foro, pero no
quiero subscribirme a otro mas y de paso seguro que aca hay alguno que se ha
enfrentado a algo asi. El tema es el siguiente:

Tengo una tabla en donde se guardan las cotizaciones de cada fecha de la
moneda local frente al dolar americano. El rango de fechas es de unos 16
años, pero para algunos dias no tenemos datos, es decir, las fechas se van
saltando. La consulta es que dado una fecha y un codigo de moneda te
devuelve la cotizacion. El tema es que yo muchas veces no tengo la
cotizacion del dia exacto, pero si la de dos o tres dias despues o del día
anterior.

Pregunta: existe alguna forma mediante sql (uniones, algo asi) en donde yo
pueda obtener la cotizacion de la fecha que estoy buscando, pero si no
existe que me retorne automaticamente el mas cercano o algo por el estilo.

Alguno tiene una idea aproximada por donde se puede encarar esto? Agradezco
mucho su ayuda y nuevamente pido disculpas por utilizar este foro (aunque la
aplicacion la estoy desarrollando en C#, así que tan mal no esta :D)



Es muy fácil, calcula en una columna la distancia en días desde la
fecha que le das y coge la fila que tenga la menor distancia.


Saludos
Respuesta Responder a este mensaje
#2 Lluis Franco
31/10/2007 - 14:10 | Informe spam
:-)
Hola Roberto,
En el caso que te ocupa, particularmente te aconsejaría ir a buscar la
última cotización conocida, ya que no es recomendable usar una cotización
futura.
Así que solamente hay que ir a buscar la fecha de la última cotización y
usarla en el filtro de la consulta.

Te adjunto un ejemplo (muy similar al tuyo pero con dos tablas en lugar de
una):

declare @mydate datetime, @lastdate as datetime
set @mydate = '20071014'
declare @monedavalorid int
set @monedavalorid = -3

set @lastdate (
select top 1 p.date
from photos p
where p.date <= @mydate
order by p.date desc
)

select
pd.valor
from
photos p
inner join photodata pd
on pd.photoid = p.photoid
where
p.date = @lastdate
and
pd.monedavalorid = @monedavalorid

Todo esto se podría definir en una sola instrucción SQL, pero creo que queda
más claro de este modo.
Un saludo!

Lluís Franco i Montanyés
[MS-MVP-MCP Visual Basic]
Web: http://sps.uyssoft.com
Blog: http://msmvps.com/blogs/lfranco
Geeks: http://geeks.ms/blogs/lfranco
(Guía de netiquette de los foros)
http://sps.uyssoft.com/Foros%20onli...uette.aspx
FIMARGE, S.A.
Principat d'Andorra

Tel.: +376 805 100
Fax: +376 824 500
Mi Perfil MVP en:
https://mvp.support.microsoft.com/profile/Lluis
This posting is provided "AS IS" with no warranties, and confers no rights.
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho.
Respuesta Responder a este mensaje
#3 Pablo
31/10/2007 - 14:27 | Informe spam
CREATE PROCEDURE cotizacion

@fecha

AS

SELETC MAX(FECHA)
FROM Cotizaciones
WHERE FECHA <= @Fecha

Pablo

"Robert Barreiro" escribió en el mensaje
news:
Hola que tal muchachos?

Esta es una pregunta de SQL mas bien y se que este no es el foro, pero no
quiero subscribirme a otro mas y de paso seguro que aca hay alguno que se
ha enfrentado a algo asi. El tema es el siguiente:

Tengo una tabla en donde se guardan las cotizaciones de cada fecha de la
moneda local frente al dolar americano. El rango de fechas es de unos 16
años, pero para algunos dias no tenemos datos, es decir, las fechas se van
saltando. La consulta es que dado una fecha y un codigo de moneda te
devuelve la cotizacion. El tema es que yo muchas veces no tengo la
cotizacion del dia exacto, pero si la de dos o tres dias despues o del día
anterior.

Pregunta: existe alguna forma mediante sql (uniones, algo asi) en donde yo
pueda obtener la cotizacion de la fecha que estoy buscando, pero si no
existe que me retorne automaticamente el mas cercano o algo por el estilo.

Alguno tiene una idea aproximada por donde se puede encarar esto?
Agradezco mucho su ayuda y nuevamente pido disculpas por utilizar este
foro (aunque la aplicacion la estoy desarrollando en C#, así que tan mal
no esta :D)


Saludos



Respuesta Responder a este mensaje
#4 Pablo
31/10/2007 - 14:29 | Informe spam
Perdon eso no sirve

CREATE PROCEDURE dbo.cotizacion

@fecha

AS

SELETC TOP 1 Cotizacion
FROM Cotizaciones
WHERE FECHA <= @Fecha
ORDER BY FECHA Desc

Pablo

"Robert Barreiro" escribió en el mensaje
news:
Hola que tal muchachos?

Esta es una pregunta de SQL mas bien y se que este no es el foro, pero no
quiero subscribirme a otro mas y de paso seguro que aca hay alguno que se
ha enfrentado a algo asi. El tema es el siguiente:

Tengo una tabla en donde se guardan las cotizaciones de cada fecha de la
moneda local frente al dolar americano. El rango de fechas es de unos 16
años, pero para algunos dias no tenemos datos, es decir, las fechas se van
saltando. La consulta es que dado una fecha y un codigo de moneda te
devuelve la cotizacion. El tema es que yo muchas veces no tengo la
cotizacion del dia exacto, pero si la de dos o tres dias despues o del día
anterior.

Pregunta: existe alguna forma mediante sql (uniones, algo asi) en donde yo
pueda obtener la cotizacion de la fecha que estoy buscando, pero si no
existe que me retorne automaticamente el mas cercano o algo por el estilo.

Alguno tiene una idea aproximada por donde se puede encarar esto?
Agradezco mucho su ayuda y nuevamente pido disculpas por utilizar este
foro (aunque la aplicacion la estoy desarrollando en C#, así que tan mal
no esta :D)


Saludos



Respuesta Responder a este mensaje
#5 Robert Barreiro
31/10/2007 - 15:43 | Informe spam
Impecable!!!! Muchas gracias a todos por sus respuestas!

Ah, me olvide de decir que la fecha esta en formato texto como AA-MM-DD pero
bueh, sera cuestion de convertirla nomas. Veremos que onda. Yo preguntaba
por hace un tiempo vi una ejemplo con una union que te traia el registro que
querias 1 anterior y el siguiente o algo asi, por eso capaz alguno conocía.

En fin, muchas gracias a todos! :)


"Lluis Franco" escribió en el mensaje
news:%
:-)
Hola Roberto,
En el caso que te ocupa, particularmente te aconsejaría ir a buscar la
última cotización conocida, ya que no es recomendable usar una cotización
futura.
Así que solamente hay que ir a buscar la fecha de la última cotización y
usarla en el filtro de la consulta.

Te adjunto un ejemplo (muy similar al tuyo pero con dos tablas en lugar de
una):

declare @mydate datetime, @lastdate as datetime
set @mydate = '20071014'
declare @monedavalorid int
set @monedavalorid = -3

set @lastdate > (
select top 1 p.date
from photos p
where p.date <= @mydate
order by p.date desc
)

select
pd.valor
from
photos p
inner join photodata pd
on pd.photoid = p.photoid
where
p.date = @lastdate
and
pd.monedavalorid = @monedavalorid

Todo esto se podría definir en una sola instrucción SQL, pero creo que
queda más claro de este modo.
Un saludo!

Lluís Franco i Montanyés
[MS-MVP-MCP Visual Basic]
Web: http://sps.uyssoft.com
Blog: http://msmvps.com/blogs/lfranco
Geeks: http://geeks.ms/blogs/lfranco
(Guía de netiquette de los foros)
http://sps.uyssoft.com/Foros%20onli...uette.aspx
FIMARGE, S.A.
Principat d'Andorra

Tel.: +376 805 100
Fax: +376 824 500
Mi Perfil MVP en:
https://mvp.support.microsoft.com/profile/Lluis
This posting is provided "AS IS" with no warranties, and confers no
rights.
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho.


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