Запрос по таблице на определенную дату

alienf

У меня таблица валют, содержащая курсы, по датам, не каждодневные, а по мере изменения курса.Мне нужно получить курс допустим usd по отношению к euro на какую-то определенную дату, возможно на которую не был занесен курс. Как сделать ума не приложу..
10 ответов

alienf

а можно скрипт на создание таблиыы и заполнение ее тестовыми данными + что хотите получить ?!


alienf

А что тут сложного?
select TOP <b>1</b> * from table1 WHERE date <= @date
ORDER BY date DESC


alienf

а можно скрипт на создание таблиыы и заполнение ее тестовыми данными + что хотите получить ?!
Скрипт на создание и заполение не важен, мне просто нужен примитивный пример получения отношения курсов. Поясню:допустим в одну таблицу вводятся курсы валют usd, euro, вносятся не каждый день, а по мере изменения курса. Мне нужно получить отношение курса доллара к евро на допустим 15 августа, но на эту дату курс доллара допустим введен и равен какому то значению, а евро не введен, т.е. фактически надо получить курс последний введеный до 15 августа.


alienf

Классическая задача...Каждую неделю вопрос по ней поднимается.Вот варианты решения: тынц-----------------------------------------------------------------------------------------------------------------------------------------З.Ы.Неспешно ищу работу, согласен на переезд в Москву или Питер


alienf

т.е. насколько я понял есть табличка такого плана:Валюта Курс ДатаUSD 25 01.08.2006EURO 32 02.08.2006Нужно получить курс доллара за 02.08.2006:
SELECT Курс
FROM TabName
WHERE Дата <= '20060802' AND Валюта = 'USD'
А вместе с Евро:
SELECT Курс AS КурсЕвро, (SELECT Курс FROM TabName WHERE Дата <= '20060802' AND Валюта = 'USD') AS КурсДол
FROM TabName
WHERE Дата <= '20060802' AND Валюта = 'EURO'


alienf

точнее так:
SELECT TOP <b>1</b> Курс AS КурсЕвро, (SELECT TOP <b>1</b> Курс FROM TabName WHERE Дата <= '20060802' AND Валюта = 'USD') AS КурсДол
FROM TabName
WHERE Дата <= '20060802' AND Валюта = 'EURO'


alienf

блин, чего-то я туплю, вообщем чтобы вытащить курс на определенную дату:
SELECT Курс 
FROM TabName 
WHERE Дата = (SELECT MAX(Дата) FROM TabName WHERE Дата <= '20060802') 
	 AND Валюта = 'USD'


alienf

set nocount on
create table #currency
(
	cur_id int identity,
	cur_type varchar(<b>10</b>),
	cur_value money,
	cur_date smalldatetime default(getdate())
)

insert into #currency values ('usd', <b>5</b>.<b>08</b>, '2006-08-01')
insert into #currency values ('usd', <b>5</b>.<b>10</b>, '2006-08-08')
insert into #currency values ('usd', <b>5</b>.<b>11</b>, '2006-08-10')
insert into #currency values ('usd', <b>5</b>.<b>15</b>, '2006-08-15')
insert into #currency values ('euro', <b>6</b>.<b>20</b>, '2006-08-03')
insert into #currency values ('euro', <b>6</b>.<b>18</b>, '2006-08-14')
insert into #currency values ('euro', <b>6</b>.<b>25</b>, '2006-08-16')

declare @date varchar(<b>20</b>)
set @date = '2006-08-15'

select @date as [Дата], 
(select top <b>1</b> cur_value from #currency 
where cur_date <= @date and cur_type = 'usd' order by cur_date desc) as [Курс долара],
(select top <b>1</b> cur_value from #currency 
where cur_date <= @date and cur_type = 'euro' order by cur_date desc) as [Курс евро]

drop table #currency


alienf

set nocount on
create table #currency
(
	cur_id int identity,
	cur_type varchar(<b>10</b>),
	cur_value money,
	cur_date smalldatetime default(getdate())
)

insert into #currency values ('usd', <b>5</b>.<b>08</b>, '2006-08-01')
insert into #currency values ('usd', <b>5</b>.<b>10</b>, '2006-08-08')
insert into #currency values ('usd', <b>5</b>.<b>11</b>, '2006-08-10')
insert into #currency values ('usd', <b>5</b>.<b>15</b>, '2006-08-15')
insert into #currency values ('euro', <b>6</b>.<b>20</b>, '2006-08-03')
insert into #currency values ('euro', <b>6</b>.<b>18</b>, '2006-08-14')
insert into #currency values ('euro', <b>6</b>.<b>25</b>, '2006-08-16')

declare @date varchar(<b>20</b>)
set @date = '2006-08-15'

select @date as [Дата], 
(select top <b>1</b> cur_value from #currency 
where cur_date <= @date and cur_type = 'usd' order by cur_date desc) as [Курс долара],
(select top <b>1</b> cur_value from #currency 
where cur_date <= @date and cur_type = 'euro' order by cur_date desc) as [Курс евро]

drop table #currency
Спасибо за помощь.Можно ли сразу получить соотношение прям в запросе?


alienf

Можно ли сразу получить соотношение прям в запросе?
Ну Вы хоть над чем-то сами подумайте! Неужели вместо запятой трудно знак деления поставить???