powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова про поиск ближайшей даты
5 сообщений из 5, страница 1 из 1
Снова про поиск ближайшей даты
    #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
Снова про поиск ближайшей даты
    #33698754
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь посмотри

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

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


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


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