powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти ошибки пересечения периодов а архиве
16 сообщений из 16, страница 1 из 1
Найти ошибки пересечения периодов а архиве
    #39769167
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как бы вы быстро нашли ошибки в архивной таблице, где могут быть заполнены периоды занимаемой должности с пересечением?
Например, человек был на разных должностях в такой последовательности

1 уборщик 1.01.2017 10.01.20172 ст.уборщик 11.01.2017 25.01.20173 гл.уборщик 22.01.2017 01.02.2017

когда он стал главным уборщиком, ему ошибочно поставили 22.01.2017, а надо было 26.01.2017
и таких ошибок может быть много.

Хочется сделать проверку одним запросом.
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769174
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,
в табличке должен быть и ТН человечка
или Вы ищете ошибки для конкретного работника?

в чем у Вас проблема, перебором сравниваете не пересекается ли

зы
даж кажись ф-ция в оракле была

.....
stax
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769179
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbА как бы вы быстро нашли ошибки в архивной таблице, где могут быть заполнены периоды занимаемой должности с пересечением?
Например, человек был на разных должностях в такой последовательности

1 уборщик 1.01.2017 10.01.20172 ст.уборщик 11.01.2017 25.01.20173 гл.уборщик 22.01.2017 01.02.2017

когда он стал главным уборщиком, ему ошибочно поставили 22.01.2017, а надо было 26.01.2017
и таких ошибок может быть много.

Хочется сделать проверку одним запросом.
напр для
1 уборщик 1.01.2017 10.01.20192 ст.уборщик 11.01.2017 25.01.20173 гл.уборщик 22.01.2017 01.02.2017
что надо получить, в какой форме?

ps
в самом простом случае ф-ция lag/lead

.....
stax
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769186
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
with t(pos_id, emp_id, emp_position, fd, td) as (select 1, 1,	'уборщик', date'2017-01-01', date'2017-01-10'
from dual union all select 75, 1, 'ст.уборщик', date'2017-01-11', date'2017-01-25'
from dual union all select 8654, 1, 'гл.уборщик', date'2017-01-22', date'2017-02-01'
from dual
)
, solution1 as (
  select t1.pos_id, t1.emp_position, t1.fd, t1.td 
    from t t1, t t2
   where t1.emp_id = t2.emp_id
     and t1.fd < t2.td
     and t1.td > t2.fd
     and t1.pos_id <> t2.pos_id
)
, solution2 as (
  select pos_id, emp_position, fd, td, i_flag 
    from (
    select pos_id, emp_position, fd, td
         , case when fd < max(td) over(partition by emp_id order by fd rows between unbounded preceding and 1 preceding) then 'intersect with prior'
                when td > min(fd) over(partition by emp_id order by td rows between 1 following and unbounded following) then 'intersect with following'
            end i_flag
    from t
  ) where i_flag is not null
)
select * from 
solution1
--solution2
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769191
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbкогда он стал главным уборщиком, ему ошибочно поставили 22.01.2017, а надо было 26.01.2017
и таких ошибок может быть много.

А почему Вы решили, что это ошибки? Человек действительно может одновременно занимать две
и более должностей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769193
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

даже если не может на нескольких одновременно, то неправильмым может оказатся и 25.01.2017

зы
если стоит задача помаленько навести лад в бардаке,
то имхо часто достаточно lag/lead,
а дальше бухи рученьками принимают решение как правильно

....
stax
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769204
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxнеправильмым может оказатся и 25.01.2017

Вот и я как бы намекаю, что надо не пересечения периодов искать, а несоответствия с
таблицей приказов о назначении/снятии.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769233
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это частный случай, в котором это является ошибкой
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769234
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,
строчки в которых ошибки
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769239
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbА как бы вы быстро нашли ошибки в архивной таблице, где могут быть заполнены периоды занимаемой должности с пересечением?..

а я бы не искал, а нафик запретил периоды с пересечением (см баян 9576198 )
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769240
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish, я бы тоже не искал, если бы запретил вовремя
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769249
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous, спасибо
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769271
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

начало периода не равно концу предыдущего (пересечение/дырка)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  1  with t(pos_id, emp_id, emp_position, fd, td) as
  2  (select 1, 1,      'уборщик', date'2017-01-01', date'2017-01-10'
  3  from dual union all select 75, 1, 'ст.уборщик', date'2017-01-11', date'2017-01-25'
  4  from dual union all select 8654, 1, 'гл.уборщик', date'2017-01-22', date'2017-02-01'
  5  from dual
  6  )
  7  ,tt as (
  8  select t.*
  9  ,lag(td,1,fd-1) over (partition by emp_id order by fd /* td*/) la
 10  from t
 11  )
 12* select * from tt where fd<>la+1
SQL> /

    POS_ID     EMP_ID EMP_POSITI FD       TD       LA
---------- ---------- ---------- -------- -------- --------
      8654          1 гл.уборщик 22.01.17 01.02.17 25.01.17


зы
21801221

.....
stax
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769284
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax, спасибо
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769285
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Код: plsql
1.
  9  ,lag(td,1,fd-1) over (partition by emp_id order by fd /* td*/) la



При всем уважении - никто не обещал, что пересекаются именно соседние записи.
Ошибиться запросто могли, for ex, в годе.
...
Рейтинг: 0 / 0
Найти ошибки пересечения периодов а архиве
    #39769342
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStax
Код: plsql
1.
  9  ,lag(td,1,fd-1) over (partition by emp_id order by fd /* td*/) la



При всем уважении - никто не обещал, что пересекаются именно соседние записи.
Ошибиться запросто могли, for ex, в годе.

абсолютно согласен, см 21801221

начало=конец предыдущего самый простой случай, но часто етого достаточно

я старался озвучить что ето не совсем "Найти ошибки пересечения периодов а архиве "

напр дырка, ето ошибка для архива или нет? формально нет, не пересекается

ps
пересекающиеся часто обсуждали, я б делал через exists

опять же форма вывода, напр пересекается с несколькими, надо выводить с кем или токо сам факт

А пересекается с Б, значит Б с А, надо оба выводить, и тд

....
stax
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Найти ошибки пересечения периодов а архиве
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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