2012-11-01 2 views
1

Мы бежим Oracle 11g на Windows Server 2008 R2фильтр дубликатов записей в отчете в Oracle 11g

я в настоящее время есть приложение, которое используется на национальном уровне для управления нашей системы рекрутинга, мы контракт инженерного кадрового фирма.

Теперь у нас есть довольно приличная база данных кандидатов, с которыми мы ранее работали, и я использовал Oracle Text, чтобы сделать прикрепленное резюме доступным для поиска, что отлично работает, единственная проблема заключается в том, что мы часто отправляем того же кандидата в несколько заданий, чтобы заставить их работать быстрее, а это значит, что я могу получить резюме того же кандидата в 6 или 7 раз в результатах поиска, я ищу, чтобы он отфильтровывал дубликаты на основе имени кандидата и имени рекрутера, так как я не хотят только отфильтровывать имена кандидатов, так как некоторые люди имеют одно и то же имя, но обычно 1 рекрутер работает с 1 кандидатом, я знаю, что это не идеально, но может помочь сузить дело.

Я пробовал несколько вещей, чтобы удалить обманы, но я не могу заставить его работать, вот текущий запрос, который мы используем для генерации результатов поиска.

select score(1) relevance, 
"PKEY", 
"DATE_SUB", 
"CLIENT", 
"CANDIDATE", 
"RECRUITER", 
"SALES", 
dbms_lob.getlength("RESUME") "RESUME", 
+"MIMETYPE", 
"FILENAME", 
"POSITION", 
"AVAILABILITY", 
"RATE", 
"ISSUES", 
"WHEN_INT", 
"FEEDBACK", 
"NOTES" 
from "SUBMITTALS" 
where CONTAINS (resume, :P11_SEARCH, 1) > 0 order by 1 desc 

Любые идеи?

Еще раз спасибо.

+0

Итак, вы ищете столбец резюме. Означает ли это, что тот же самый кандидат находится в нескольких записях с другими связанными идентичными полями, такими как резюме? – Tom

ответ

1

Вы можете использовать аналитические функции для удаления дубликатов:

select * from (
    select score(1) relevance, 
    "PKEY", 
    "DATE_SUB", 
    "CLIENT", 
    "CANDIDATE", 
    "RECRUITER", 
    "SALES", 
    dbms_lob.getlength("RESUME") "RESUME", 
    "MIMETYPE", 
    "FILENAME", 
    "POSITION", 
    "AVAILABILITY", 
    "RATE", 
    "ISSUES", 
    "WHEN_INT", 
    "FEEDBACK", 
    "NOTES", 
    row_number() over (partition by CANDIDATE, RECRUITER order by PKEY) rn 
    from "SUBMITTALS" 
    where CONTAINS (resume, :P11_SEARCH, 1) > 0 
) 
where rn = 1 
order by 1 desc 

Это вернет одну строку за кандидата/рекрутер пары.

Смежные вопросы