powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сложный запрос
5 сообщений из 5, страница 1 из 1
Сложный запрос
    #33728845
nightshine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть база содержащая людей, их даты регистрации(у одного человека может быть несколько регистраций) и еще некоторые поля (их суть не важна просто их нужно доставать из БД).

Вся информация помещается в одну таблицу:
ID, Fam,Name,Otch, DateReg, Info. У одного человека может быть три регистрации, при это м ID будут разные, даты и информация тоже. Как выбрать информацию обо всех сразу, чтобы о каждом была только информация, соответствующая последней регистрации этого человека?

Долго думал над запросом, ничего путнего не придумал, может кто сталкивался, знает?
...
Рейтинг: 0 / 0
Сложный запрос
    #33728873
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если VFP 9.0, то можно так через корреляционный подзапрос:
Код: plaintext
1.
2.
3.
4.
SELECT t1.ID, t1.Fam,t1.Name,t1.Otch, t1.DateReg, t1.Info
FROM case t1 WHERE t1.DateReg = 
(SELECT MAX(t2.DateReg) FROM case t2 WHERE t1.Fam = t2.Fam
AND t1.Name = t2.Name AND t3.Otch = t3.Otch )
Позволю себе заметить, что база не нормализована. Нет первичного ключа (PK) для сущности "люди". В самом деле, Ф.И.О. вряд ли можно считать первичным ключом.
Следовательно, надо создать справочник "пациенты" (patien) и в него перетащить все поля типа Name, Otch, Fam и пр.. В него добавить PK (например patien_ID) и в таблицу регистрации посещений (case) ссылку на него:
ID, patien_ID ,DateReg, Info
Тогда запрос будет такой:
Код: plaintext
1.
2.
3.
4.
SELECT ID, p.Fam, p.Name,p.Otch, t1.DateReg, t1.Info
FROM case t1 INNER JOIN patien p ON t1.patien_ID = p.patien_ID
WHERE t1.DateReg = 
(SELECT MAX(t2.DateReg) FROM case t2 WHERE t1.patien_ID = t2.patien_ID)

С уважением, Алексей
...
Рейтинг: 0 / 0
Сложный запрос
    #33731380
nightshine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду пробовать. Насчет нормализации, база не моя, и делать с ней ничего права не имею =), просто есть база и стоит задача. Это не ФоксПро, а .НЕТ просто через VFPOLEDB.1 я подсоединяюсь к фоксовой базе. Если при работе с провайдером этот запрос прокатит, то отпишусь обязательно, если не прокатит тоже отпишусь =)))
...
Рейтинг: 0 / 0
Сложный запрос
    #33731421
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно.
Прошу прощение за допущенную ошибку в первом запросе, не t3, а t1 и t2:
Код: plaintext
1.
2.
3.
SELECT t1.ID, t1.Fam,t1.Name,t1.Otch, t1.DateReg, t1.Info
FROM case t1 WHERE t1.DateReg = 
(SELECT MAX(t2.DateReg) FROM case t2 WHERE t1.Fam = t2.Fam
AND t1.Name = t2.Name AND t1.Otch = t2.Otch )

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


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