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

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

Долго думал над запросом, ничего путнего не придумал, может кто сталкивался, знает?
...
Рейтинг: 0 / 0
16.05.2006, 08:49
    #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
17.05.2006, 06:58
    #33731380
nightshine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Спасибо, буду пробовать. Насчет нормализации, база не моя, и делать с ней ничего права не имею =), просто есть база и стоит задача. Это не ФоксПро, а .НЕТ просто через VFPOLEDB.1 я подсоединяюсь к фоксовой базе. Если при работе с провайдером этот запрос прокатит, то отпишусь обязательно, если не прокатит тоже отпишусь =)))
...
Рейтинг: 0 / 0
17.05.2006, 07:57
    #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
23.05.2006, 05:45
    #33744034
nightshine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Увы, но не получается провести подобный запрос. Пишет, что одно из ключевых слов не может быть распознано! Вот такой вот ужас. Выходит придется руками данные вытягивать из общего запроса и обрабатывать их в цикле. Учитывая количество записей будет работать очень и очень долго!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сложный запрос / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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