Уважаемые!
Третий день не могу побороть запрос, помогите, пожалуйста.
Есть две таблицы:
ЛИЦО (как вмдно, сохраняю в ней и физиков и юриков)
Column Name | Data Type | Primary Key | ЛИЦО_КОД | NUMBER | 1 | ЮЛ_ИМЯ_КРАТКО | VARCHAR2(4000) | | ЮЛ_ИМЯ_ПОЛНОЕ | VARCHAR2(4000) | | ЮЛ_ИМЯ_АНГЛ | VARCHAR2(4000) | | ЮЛ_ИНН | VARCHAR2(10) | | ЮЛ_КПП | VARCHAR2(9) | | ЮЛ_ОГРН | VARCHAR2(13) | | ЮЛ_ЕГРЮЛ_ДАТА | DATE | | ЮЛ_ЕГРЮЛ_ОРГАН | VARCHAR2(4000) | | ЮЛ_ОКПО | VARCHAR2(10) | | БАНК_БИК | VARCHAR2(9) | | БАНК_КОРСЧЕТ | VARCHAR2(20) | | БАНК_SWIFT | VARCHAR2(20) | | ФЛ_ИНН | VARCHAR2(12) | | ФЛ_ДР | DATE | | ФЛ_МР | VARCHAR2(4000) | ФЛ_ПОЛ | VARCHAR2(2) | ФЛ_ФАМИЛИЯ | VARCHAR2(4000) | ФЛ_ИМЯ | VARCHAR2(4000) | ФЛ_ОТЧЕСТВО | VARCHAR2(4000) | ФЛ_ПАС_СЕРИЯ | VARCHAR2(4) | ФЛ_ПАС_НОМЕР | VARCHAR2(6) | ФЛ_ПАС_ДАТА | DATE | ФЛ_ПАС_ОРГАН | VARCHAR2(4000) | ФЛ_ПАС_КП | VARCHAR2(4000) | ИП_ОГРНИП | VARCHAR2(15) | ИП_ЕГРИП_ДАТА | DATE | ИП_ЕГРИП_ОРГАН | VARCHAR2(4000) | ПРИМЕЧАНИЕ | VARCHAR2(4000) | ЮЛ_ОПФ | VARCHAR2(20) | ЛИЦО_ТИП | VARCHAR2(4) | ЮЛ_ОКАТО | VARCHAR2(4000) |
|
и тиблица ГД (Генеральный дироектор)
Column Name | Data Type | Primary Key | ОБЩЕСТВО | NUMBER | 1 | ГД | NUMBER | 2 | ГД_С | DATE | 3 | ГД_ПО | DATE | | ПРИМЕЧАНИЕ | VARCHAR2(4000) | | ГД_ОГРАНИЧЕНИЕ | VARCHAR2(4000) | |
|
Необходимо вывести результатом список всех имеющихся компаний и их Генеральных.
Проблема в том, что в таблице ГД может содержаться несколько Генеральных для одной компании, которые отличаются полем ГД_С. Естественно, хочется выбрать для компании долько свежего Директора, т.е. того, у которого ГД_С самая поздняя.
Нашел на форуме решение этой проблемы в виде
...where
"ГД"."ГД_С" IN (select max("ГД_С") from "ГД" tt where "ГД"."ОБЩЕСТВО" = tt."ОБЩЕСТВО")
Но в связи с этим условием возникла другая проблема.
Дело в том, что в таблице ГД представлены Директора не для всех компаний.
Таким образом из результата моего запроса при включении вешеописанной строки исключились компании, где Генеральный не определен.
ЧТО ЖЕ ДЕЛАТЬ, КАК ЖЕ БЫТЬ ???
Вот сам исходный запрос, над которым мозг ломаю:
select
case
when instr("ЛИЦО"."ЮЛ_ИМЯ_ПОЛНОЕ",'"',1)>0
then "ЛИЦО"."ЮЛ_ОПФ" || ' "' || "ЛИЦО"."ЮЛ_ИМЯ_ПОЛНОЕ"
else "ЛИЦО"."ЮЛ_ОПФ" || ' "' || "ЛИЦО"."ЮЛ_ИМЯ_ПОЛНОЕ" || '"'
end as "НАИМЕНОВАНИЕ",
"ЛИЦО"."ЮЛ_ИНН" as "ИНН",
"ЛИЦО"."ЮЛ_КПП" as "КПП",
"ЛИЦО"."ЮЛ_ОГРН" as "ОГРН",
"ЛИЦО"."ЮЛ_ЕГРЮЛ_ДАТА" as "ОГРН-ДАТА",
"ЛИЦО_1"."ФЛ_ФАМИЛИЯ" || ' ' || SUBSTR("ЛИЦО_1"."ФЛ_ИМЯ",1,1) || '.' || SUBSTR("ЛИЦО_1"."ФЛ_ОТЧЕСТВО",1,1) || '.' as "ГД",
"ГД"."ГД_С" as "ВСТУПИЛ",
"ГД"."ГД_ПО" as "ПРЕКРАЩАЕТ",
"ГД"."ГД_ОГРАНИЧЕНИЕ" as "ОГРАНИЧЕНИЯ"
from "ЛИЦО" "ЛИЦО_1",
"ГД" "ГД",
"ЛИЦО" "ЛИЦО",
"ЛИЦО_ГРУППА"
where "ЛИЦО"."ЛИЦО_КОД"="ГД"."ОБЩЕСТВО"(+)
and "ГД"."ГД"="ЛИЦО_1"."ЛИЦО_КОД"(+)
and "ЛИЦО"."ЛИЦО_ТИП" ='ЮЛ'
and "ГД"."ГД_С" IN (select max("ГД_С") from "ГД" tt where "ГД"."ОБЩЕСТВО" = tt."ОБЩЕСТВО")
order by "ГРУППА","НАИМЕНОВАНИЕ"