Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова про поиск ближайшей даты / 5 сообщений из 5, страница 1 из 1
28.04.2006, 16:26
    #33698044
hattab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про поиск ближайшей даты
Камрады,
не могу найти ответ на такую проблему (VFP OLEDB):

есть таблица "Документы" (docs)
date - doc
01.01.2006 АБЦ
02.01.2006 БЦД
05.01.2006 ЦДЕ

и есть таблица "Курсы валют" (rates):
date - rate
01.01.2006 135
04.01.2006 138

нужно создать новую таблицу final:
date - doc - rate
01.01.2006 АБЦ 135
02.01.2006 БЦД 135 // берет предшествующую дату, если нет точно такой же
05.01.2006 ЦДЕ 138 // берет предшествующую дату, если нет точно такой же

Как правильно написать запрос?
У меня выходит что-то вроде вот этого:

SELECT docs.date, docs.doc, rates.rate
FROM docs
LEFT OUTER JOIN rates
ON docs.date = (SELECT MAX(rates.date) FROM rates WHERE date < docs.date)

*********************************
Но, понятно, не работает.

Буду очень признателен за подсказку!
...
Рейтинг: 0 / 0
29.04.2006, 00:38
    #33698754
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про поиск ближайшей даты
Вот здесь посмотри

Выбрать из дочерней таблицы записи с максимальной датой

Логика та же, только в подзапрос, который в IN надо будет добавить условие WHERE date < docs.date
...
Рейтинг: 0 / 0
29.04.2006, 14:25
    #33699047
hattab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про поиск ближайшей даты
ВладимирМВот здесь посмотри

Выбрать из дочерней таблицы записи с максимальной датой

Логика та же, только в подзапрос, который в IN надо будет добавить условие WHERE date < docs.date

попробовал.
облом.

пишу ему:
SELECT * from docs
LEFT JOIN rates
ON docs.dt = rates.dt
WHERE rates.dt IN (select MAX(dt) FROM rates WHERE dt < docs.dt)

он отвечает: Queries of this type are not supported.
И проблема, судя по всему - в последнем docs.dt. Туда, во вложенный селект, его вставлять нельзя.

Для проверки попробовал поставить не docs.dt, а конкретную дату - работает.
...
Рейтинг: 0 / 0
29.04.2006, 20:19
    #33699291
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про поиск ближайшей даты
Попробуй так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE CURSOR docs (dt D, doc C( 10 ))
INSERT INTO docs (dt, doc) VALUES ({^ 2006 - 01 - 01 }, "АБЦ")
INSERT INTO docs (dt, doc) VALUES ({^ 2006 - 01 - 02 }, "БЦД")
INSERT INTO docs (dt, doc) VALUES ({^ 2006 - 01 - 05 }, "ЦДЕ")

CREATE CURSOR rates (dt D, rate I)
INSERT INTO rates (dt, rate) VALUES ({^ 2006 - 01 - 01 },  135 )
INSERT INTO rates (dt, rate) VALUES ({^ 2006 - 01 - 04 },  138 )

SELECT * from docs, rates ;
WHERE rates.dt IN (select MAX(rates.dt) FROM rates WHERE rates.dt <= docs.dt)

Правда, подобный запрос поддерживается только в VFP9. Если у тебя драйвер OLE DB младшей версии, то опять будет сообщение "Queries of this type are not supported"
...
Рейтинг: 0 / 0
30.04.2006, 14:53
    #33699679
hattab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про поиск ближайшей даты
ВладимирМПопробуй так:


Владимир,
большое спасибо.
Получилось.
:)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова про поиск ближайшей даты / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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