powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Надо составить запрос ....
5 сообщений из 5, страница 1 из 1
Надо составить запрос ....
    #32007190
DennisL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня возникла такая задачка :

Надо составить запрос который бы возвращал ближайший (или наиболее близккий из предыдущих) курс валюты для заданной даты, проблема в том что нет 100% гарантии что там есть курс на каждую дату !

Структура таблицы с курсами валют:
CurrDate datetime
Rate decimal
Type tinyint

На всякий случай :
Все это нужно для того чтобы в триггере обрабатывать UPDATE поля с датой, т.к. может быть пакетное обновление
надо либо подзапрос для каждой строки из updated и в той же таблице делать изменение в определенных полях ...
как я понимаю это легко сделать с помощью функции но у меня MS SQL 7

В принципе главное чтобы всегда возвращался какойто курс так как он используеться в мат. операциях и если его не будет может получиться ошибка ...
...
Рейтинг: 0 / 0
Надо составить запрос ....
    #32007192
zamm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то типа следующего

declare @MyDate datetime
declare @MyType int
set @MyDate = ...
set @MyType = ...

select Rate from CursTbl where CurrDate = (select max(CurrDate) from CursTbl where CurDate<=@MyDate and Type=@MyType) and Type=@MyType
...
Рейтинг: 0 / 0
Надо составить запрос ....
    #32007205
boom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не Scala ли у тебя?
...
Рейтинг: 0 / 0
Надо составить запрос ....
    #32007206
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если валюта только одна можно еще проще:

select top 1 Rate
from CursTbl
where CurrDate <=@date
order by CurrDate desc

Если же их несколько(допустим Type - это отдельная валюта), то:
select type, Rate from CursTbl c1 where CurrDate = (select max(CurrDate) from CursTbl c2 where CurDate<=@MyDate and c1.Type=c2.Type)
Или же через временную таблицу: сначала выбрать нужные даты, за которые есть курсы, а потом уже сами курсы, но в данном случае, когда количество валют немного, можно и вложенным запросом.
...
Рейтинг: 0 / 0
Надо составить запрос ....
    #32007247
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT TOP 1 Rate,Type FROM CurrRate WHERE Type=@MyType AND CurrDate <= @MyDate ORDER BY CurrDate DESC
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Надо составить запрос ....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]