SQL код для поиска работы, зарегистрированной в течение +/- 1 дня для того же сайта - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь настроить отчет, чтобы показать мне задания, которые могут быть дубликатами. Критерии, которые я хочу использовать в отчете, - показать мне все вакансии для определенного типа работы c для сайта, на котором уже есть работа, зарегистрированная в течение +/- 1 дня.

Например задание с кодом задания "G012" приходит с датой 24 января для West Side, в которой есть код сайта в системе "WS1".

Что бы я хотел, чтобы система сделала, чтобы посмотреть, уже есть задание, зарегистрированное с job_code "G012" и site_code "WS1" в диапазоне дат +/- 1 день от date_logged date.

код, который я получил до сих пор, равен

select
job.job_number,
job.job_entry_date,
central_site.site_code,
central_site.site_name

from
job
inner join job_type on job_type.job_type_key = job.job_type_key
inner join job_status_log on job.job_number = job_status_log.job_number and job.job_log_number = 
job_status_log.job_log_number
inner join job_status on job_status.status_code = job_status_log.status_code
inner join central_site on central_site.site_code = job.site_code

where
job_type.job_type_code in ('G012', 'G013') and
job_status_log.status_code = '5200'

order by central_site.site_code, job.job_entry_date

Пример данных до сих пор

JOB NUMBER  JOB_ENTRY_DATE     DATE_LOGGED  SITE_CODE  SITE_NAME
1           24/01/2020 14:32   24/01/2020   121        HIGH STREET  
2           23/01/2020 23:23   23/01/2020   293        BLAKEMORE
3           23/01/2020 12:23   23/01/2020   224        MAIN STREET
4           23/01/2020 15:23   23/01/2020   121        HIGH STREET  

Что я хотел бы показать

JOB NUMBER  JOB_ENTRY_DATE     DATE_LOGGED  SITE_CODE  SITE_NAME    DUPLICATE
1           24/01/2020 14:32   24/01/2020   121        HIGH STREET  YES
2           23/01/2020 23:23   23/01/2020   293        BLAKEMORE    NO
3           23/01/2020 12:23   23/01/2020   224        MAIN STREET  NO
4           23/01/2020 15:23   23/01/2020   121        HIGH STREET  YES

1 Ответ

0 голосов
/ 25 января 2020

Вот как я понял вопрос; посмотрим, поможет ли это. Он проверяет каждый код сайта предыдущий и следующий дата и - если разница меньше 1 дня, считают его дубликатом.

SQL> with test (job_number, date_logged, site_code, site_name) as
  2    (select 1, date '2020-01-24', 121, 'high street' from dual union all
  3     select 2, date '2020-01-23', 293, 'blackemore'  from dual union all
  4     select 3, date '2020-01-23', 224, 'main street' from dual union all
  5     select 4, date '2020-01-23', 121, 'high street' from dual
  6    ),
  7  temp as
  8    (select job_number, site_code, date_logged, site_name,
  9       lag(date_logged) over (partition by site_code order by date_logged) prev_date_lged,
 10       lead(date_logged) over (partition by site_code order by date_logged) next_date_lged,
 11       --
 12       date_logged - lag(date_logged) over (partition by site_code order by date_logged) diffp,
 13       date_logged - lead(date_logged) over (partition by site_code order by date_logged) diffn
 14     from test
 15    )
 16  select job_number, date_logged, site_code, site_name,
 17    case when abs(diffp) <= 1 or abs(diffn) <= 1 then 'yes' else 'no' end duplicate
 18  from temp
 19  order by job_number;

JOB_NUMBER DATE_LOGGE  SITE_CODE SITE_NAME   DUP
---------- ---------- ---------- ----------- ---
         1 24/01/2020        121 high street yes
         2 23/01/2020        293 blackemore  no
         3 23/01/2020        224 main street no
         4 23/01/2020        121 high street yes

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...