powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос к базе.
12 сообщений из 12, страница 1 из 1
Запрос к базе.
    #32019820
kosm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая проблема.Существует таблица с колонкой даты и колонкой курса доллара.Даты идут не последовательно.Т.е.простым запросом по дате вытащить курс не удается.Подскажите,пожалуйста,как должен выглядеть запрос вида:беру дату из одной таблицы ->лезу в таблицу курсов доллара и беру дату на которую в последний раз производилась фиксация курса до исходной даты?
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019822
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select *
from Rate
where Currency = 'USD'
and Date = (select max(Date)
from Rate
where Currency = 'USD'
and Date <= @D
)
где @D - дата, на которую хотим получить курс.
если всегда нужен только последний возможный курс, то and Date <= @D можно опустить.
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019824
kosm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за идею,но будет ли это работать в подобной конструкции?

SELECT CONST.VALUE, ПартииТоваров.period
FROM _1SCONST AS CONST INNER JOIN RG4623 AS ПартииТоваров ON ПартииТоваров.PERIOD <= CONST.DATE
WHERE OBJID = 'USD' AND ID = 'Currency'
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019835
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Пожалуйста.
2. Может и будет. Не знаю что делает Ваша конструкция.
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019838
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле это можно делать и без вложенных запросов. Для этого надо добавить еще одно поле - дату следующего изменения курса. Это поле должно пересчитываться в триггере, для последней даты должна стоять заведомо большая следующая дата (я обычно ставлю '20651031'). Тогда запрос выглядел бы так:
select *
from Rate
where Currency = 'USD'
and Date >=@date and NextDate <@date

Согласен что написание такого триггер потребует каких-то усилий
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019840
Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы создал уникальный кластерный индекс по столбцам (ID_CURR, DATE_RATE) и выбирал курс следующим образом:
select TOP 1 @curr_rate=CURR_RATE
from CURR_RATES
where ID_CURR=@ID_CURR and
DATE_RATE <= @DATE
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019841
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SergSuper и Andrey:

Я в своих приложениях создаю таблицу ЕЖЕДНЕВНЫХ курсов. Заполняется она, конечно, из триггеров. В таком случае запросы к курсам совершенно упрощаются, а кластерный индекс (он же primary key constraint) работает на ура:
select *
from Rate
where Currency = 'USD'
and Date = @date

Еще раз согласен, сначала нужно потужиться...
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019846
kosm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том,что мне надо вытаскивать дату из таблица1,а потом я выбираю из таблицы2,где лежат курсы валют по дате необходимый мне курс на эту дату.Если руками вводить дату,то никаких проблем,проблема возникает когда я пытаюсь брать последовательно значения из таблица1 и сопостовлять им курс.Может проще создать временную таблицу где пролистать все даты до текущей даты и всем сопоставить курс?
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019853
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 kosm:

Что-то вроде этого, не тестировал:
select t1.*, курс = (
select Rate
from Rate
where Currency = 'USD'
and Date = (select max(Date)
from Rate
where Currency = 'USD'
and Date <= t1.Date
)
from таблица1 t1
К сожалению я пока не умею красиво оформлять текст в этом форуме.


Прошу обратить внимание, что подзапрос выборки курса совершенно не оптимизирован, см. предыдущюю дискуссию, зато по-быстрому.
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019860
kosm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 MadDog
Такие попытки у меня были.Вот это место не проходит 'and Date <= t1.Date' т.к. он просит единственное значение.Так,что я решил пока создавать временную таблицу,содержащую все даты и курсы.
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019863
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Протестировал. Работает.

2 kosm:
Если Вы имеете в виду сообщение "subquery returned more than 1 value...", то это означает, что в Вашей таблице находятся не уникальные значения по полю Date.
...
Рейтинг: 0 / 0
Запрос к базе.
    #32019865
kosm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь.Победил таки.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос к базе.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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