Лига Цифровой Экономики
- Даны две таблицы T1 (col1, col2) и T2 (col1, col3)
В таблице T1 три записи
В таблице T2 четыре записи
Оцените какое количество строк вернут операторы
T1 join T2 on T1.col1 = T2.col1
min:0
max:12
T1 left join T2 on T1.col1 = T2.col1
min:3
max:12
T1 full join T2 on T1.col1 = T2.col1
min:4
max:12
T1 cross join T2
min:12
max:12
- Дана таблица T(value), выведите все повторяющиеся записи. Написать sql-запрос.
with cte as
(
select *, count(1) over (partition by value) cnt
)
select distinct value
from cte
where cnt > 1
- Требуется написать 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 cte as
(
select *, lead(From_dt) over (partition by Employee_id order by From_dt) ld_From_dt
)
select *,
case
when ld_From_dt - To_dt > 1 then 'есть дыра со следующей записью'
when ld_From_dt - To_dt < 1 then 'есть пересечение со следующей записью'
end type_error
from cte
where ld_From_dt - To_dt > 1 or ld_From_dt - To_dt < 1
- Есть две таблицы с приходами и списаниями с банковских счетов:
Income
account_id datetime amount
Outcome
account_id datetime amount
Необходимо написать запрос, который вернет баланс выбранного счета на каждый
день когда были операции -- выбранного месяца.
Пример:
account_id datetime amount
777 01.02.2024 250
777 02.02.2024 300
777 07.02.2024 170
… … …
777 28.02.2024 900
with operations as
(
select account_id, datetime, amount
from Income
union all
select account_id, datetime, -amount
from Outcome
)
select account_id, datetime, sum(amount) over (partition by account_id order by datetime) balance
from operations