DB에서 상위 레벨의 item 시작, 종료일 = 하위레벨 item 시작일의 min(한개라도 있으면 값이 들어감), 하위레벨 item 종료일의 max(모든 값이 다 들어있어야함)



select prnt_item_id, min(item_str_ymd) min_val, max(item_end_ymd)
from item_table
group by prnt_item_id;
-- min함수는 null값을 무시하기 때문에, 1번 sql의 min값을 사용하면 됨
-- 종료일자가 채워져있는지 확인(count_val = sum_val)
-- count_val : prnt_item_id가 동일한 컬럼 갯수
-- sum_val : item종료일이 null이 아닌 경우(1)의 합
select prnt_item_id, min(item_str_ymd) min_val,
max(item_end_ymd), count(*) as count_val,
sum(case when item_str_ymd is not null then 1 else 0 end) as sum_val
from item_table
group by prnt_item_id;
이때, 업데이트는 lvl3 -> lvl2 -> lvl1 순서대로 가야함
4-1. 3번의 sql문을 테이블로 만들어서 값 update치기
create table temp_table
as select prnt_item_id, min(item_str_ymd) min_val,
max(item_end_ymd), count(*) as count_val,
sum(case when item_str_ymd is not null then 1 else 0 end) as sum_val
from item_table
group by prnt_item_id;
update item_Table as a
set item_str_ymd = t.min_val
from temp_table as t
where a.item_id = t.prnt_task_id;update item_Table as a
set item_end_ymd = t.max_val
from temp_table as t
where a.item_id = t.prnt_task_id
and t.count_val = t.sum_val; -- max는 모든 값이 채워져있어야 update할 수 있으므로 체크해줘야함