поправил читаемость
This commit is contained in:
+44
-19
@@ -1,23 +1,48 @@
|
||||
'''
|
||||
Требуется написать SQL-запрос, который будет находить ошибки в версионности по ключу employee_id, такие как «дыры» в истории и пересечение версий.
|
||||
Результатом запроса является список пар employee_id и from_dt, в которых есть ошибка.
|
||||
Для каждой пары вывести тип ошибки.
|
||||
|
||||
Salary
|
||||
|
||||
Employee_id Salary_amt From_dt To_dt
|
||||
1 50 000.000 01.01.2019 01.02.2019
|
||||
1 70 000.000 01.04.2019 01.01.9999
|
||||
2 70 000.000 01.01.2019 01.05.2019
|
||||
2 90 000.000 01.03.2019 01.01.9999
|
||||
3 45 000.000 01.01.2019 01.01.9999
|
||||
|
||||
'''
|
||||
|
||||
with base as (
|
||||
select
|
||||
employee_id,
|
||||
to_dt,
|
||||
from_dt,
|
||||
lag(to_dt) over (partition by employee_id order by from_dt) lag_to_dt
|
||||
from abakhytbekuly.salary
|
||||
select
|
||||
employee_id,
|
||||
to_dt,
|
||||
from_dt,
|
||||
lag(to_dt) over (partition by employee_id order by from_dt) as lag_to_dt
|
||||
from
|
||||
abakhytbekuly.salary
|
||||
),
|
||||
error as (
|
||||
select
|
||||
employee_id,
|
||||
from_dt,
|
||||
case when
|
||||
lag_to_dt > from_dt then 'пересечение'
|
||||
when
|
||||
lag_to_dt < from_dt then 'дыра'
|
||||
end as status
|
||||
from base
|
||||
where lag_to_dt is not null
|
||||
select
|
||||
employee_id,
|
||||
from_dt,
|
||||
case when
|
||||
lag_to_dt > from_dt then 'пересечение'
|
||||
when
|
||||
lag_to_dt < from_dt then 'дыра'
|
||||
end
|
||||
as status
|
||||
from
|
||||
base
|
||||
where
|
||||
lag_to_dt is not null
|
||||
)
|
||||
select *
|
||||
from error
|
||||
order by employee_id, from_dt
|
||||
select
|
||||
*
|
||||
from
|
||||
error
|
||||
order by
|
||||
employee_id, from_dt
|
||||
|
||||
|
||||
Reference in New Issue
Block a user