Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Найти в справочнике ближайшее по дате  [new]
Dreamu4aya
Member

Откуда: Саратов
Сообщений: 30
есть справочник
валюта дата курс к доллару


есть какаянить таблица
дата валюта курс прочие столбцы

в справочнике есть не все даты, нужно составить запрос, чтобы если даты нет в справочнике, брал ближайшую предыдущую и вставлял в столбец "курс"
update таблица set Курс=case
when (select [Курс к доллару]
     from Справочник 
     where Справочник.Валюта=Таблица.валюта
     and Справочник.дата=таблица.Дата)	is not null
then     (select [Курс к доллару]
     from Справочник 
     where Справочник. Валюта=таблица.Валюта
     and Справочник_курсов_Валют.дата=Свод_опер_подсолнечное.Дата )
else (select [Курс к доллару] 
  from Справочник 
   where Справочник.Валюта=Таблица.Валюта
   and Таблица.Дата=dateadd(day,-1,Справочник.дата))
 end;


Я не особо разбираюсь, поэтому вот только так смогла сделать и то, почему-то, не все работает, некоторые строки так и остаются пустыми...почему? Значение предыдущего дня в справочнике есть...
2 июл 13, 14:05    [14510361]     Ответить | Цитировать Сообщить модератору
 Re: Найти в справочнике ближайшее по дате  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2551
Dreamu4aya,
(
select top 1 [Курс к доллару] 
from Справочник 
where Справочник.Валюта = Таблица.Валюта
and Справочник.дата <= Таблица.Дата
order by Таблица.Дата desc
)
2 июл 13, 14:10    [14510403]     Ответить | Цитировать Сообщить модератору
 Re: Найти в справочнике ближайшее по дате  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
SELECT T.дата, T.валюта
,курс=(SELECT TOP(1) K.[курс к доллару] FROM справочник K WHERE K.валюта=T.валюта AND K.дата<=T.дата ORDER BY K.дата DESC)
FROM таблица T;
2 июл 13, 14:10    [14510405]     Ответить | Цитировать Сообщить модератору
 Re: Найти в справочнике ближайшее по дате  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
PaulYoung
Dreamu4aya,
(
select top 1 [Курс к доллару] 
from Справочник 
where Справочник.Валюта = Таблица.Валюта
and Справочник.дата <= Таблица.Дата
order by Таблица.Дата desc
)
Ошибочка вышла! Сортировать-то надо по дате справочника!
2 июл 13, 14:11    [14510412]     Ответить | Цитировать Сообщить модератору
 Re: Найти в справочнике ближайшее по дате  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
Select top 1 *
from Справочник
where Дата<=(Ваша дата)
order by Дата
2 июл 13, 14:12    [14510422]     Ответить | Цитировать Сообщить модератору
 Re: Найти в справочнике ближайшее по дате  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2551
iap
PaulYoung
Dreamu4aya,
(
select top 1 [Курс к доллару] 
from Справочник 
where Справочник.Валюта = Таблица.Валюта
and Справочник.дата <= Таблица.Дата
order by Таблица.Дата desc
)
Ошибочка вышла! Сортировать-то надо по дате справочника!

Ну Семён Семёныч (с)
2 июл 13, 14:12    [14510424]     Ответить | Цитировать Сообщить модератору
 Re: Найти в справочнике ближайшее по дате  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
SELECT T.дата, T.валюта,K.курс
FROM таблица T
OUTER APPLY
(
 SELECT TOP(1) U.[курс к доллару]
 FROM справочник U
 WHERE U.валюта=T.валюта AND U.дата<=T.дата
 ORDER BY U.дата DESC
) K(курс);
2 июл 13, 14:24    [14510521]     Ответить | Цитировать Сообщить модератору
 Re: Найти в справочнике ближайшее по дате  [new]
Dreamu4aya
Member

Откуда: Саратов
Сообщений: 30
Спасибо!!!!
2 июл 13, 14:44    [14510677]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить