Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
Есть такая проблема.Существует таблица с колонкой даты и колонкой курса доллара.Даты идут не последовательно.Т.е.простым запросом по дате вытащить курс не удается.Подскажите,пожалуйста,как должен выглядеть запрос вида:беру дату из одной таблицы ->лезу в таблицу курсов доллара и беру дату на которую в последний раз производилась фиксация курса до исходной даты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 07:28 |
|
||
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
select * from Rate where Currency = 'USD' and Date = (select max(Date) from Rate where Currency = 'USD' and Date <= @D ) где @D - дата, на которую хотим получить курс. если всегда нужен только последний возможный курс, то and Date <= @D можно опустить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 07:40 |
|
||
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
Спасибо за идею,но будет ли это работать в подобной конструкции? SELECT CONST.VALUE, ПартииТоваров.period FROM _1SCONST AS CONST INNER JOIN RG4623 AS ПартииТоваров ON ПартииТоваров.PERIOD <= CONST.DATE WHERE OBJID = 'USD' AND ID = 'Currency' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 07:51 |
|
||
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
1. Пожалуйста. 2. Может и будет. Не знаю что делает Ваша конструкция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 09:30 |
|
||
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
На самом деле это можно делать и без вложенных запросов. Для этого надо добавить еще одно поле - дату следующего изменения курса. Это поле должно пересчитываться в триггере, для последней даты должна стоять заведомо большая следующая дата (я обычно ставлю '20651031'). Тогда запрос выглядел бы так: select * from Rate where Currency = 'USD' and Date >=@date and NextDate <@date Согласен что написание такого триггер потребует каких-то усилий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 09:39 |
|
||
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
А я бы создал уникальный кластерный индекс по столбцам (ID_CURR, DATE_RATE) и выбирал курс следующим образом: select TOP 1 @curr_rate=CURR_RATE from CURR_RATES where ID_CURR=@ID_CURR and DATE_RATE <= @DATE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 10:00 |
|
||
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
2 SergSuper и Andrey: Я в своих приложениях создаю таблицу ЕЖЕДНЕВНЫХ курсов. Заполняется она, конечно, из триггеров. В таком случае запросы к курсам совершенно упрощаются, а кластерный индекс (он же primary key constraint) работает на ура: select * from Rate where Currency = 'USD' and Date = @date Еще раз согласен, сначала нужно потужиться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 10:06 |
|
||
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
Дело в том,что мне надо вытаскивать дату из таблица1,а потом я выбираю из таблицы2,где лежат курсы валют по дате необходимый мне курс на эту дату.Если руками вводить дату,то никаких проблем,проблема возникает когда я пытаюсь брать последовательно значения из таблица1 и сопостовлять им курс.Может проще создать временную таблицу где пролистать все даты до текущей даты и всем сопоставить курс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 10:37 |
|
||
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
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 К сожалению я пока не умею красиво оформлять текст в этом форуме. Прошу обратить внимание, что подзапрос выборки курса совершенно не оптимизирован, см. предыдущюю дискуссию, зато по-быстрому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 11:04 |
|
||
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
2 MadDog Такие попытки у меня были.Вот это место не проходит 'and Date <= t1.Date' т.к. он просит единственное значение.Так,что я решил пока создавать временную таблицу,содержащую все даты и курсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 11:18 |
|
||
|
Запрос к базе.
|
|||
|---|---|---|---|
|
#18+
Протестировал. Работает. 2 kosm: Если Вы имеете в виду сообщение "subquery returned more than 1 value...", то это означает, что в Вашей таблице находятся не уникальные значения по полю Date. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2001, 11:47 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3519&tid=1824480]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 389ms |

| 0 / 0 |
