SELECT product_id,
FIRST_VALUE(new_price) OVER(PARTITION BY product_id ORDER BY change_date DESC) AS price
FROM Products
WHERE change_date <= '2019-08-16'
UNION
SELECT DISTINCT product_id, 10 AS price
FROM Products
WHERE product_id NOT IN (SELECT product_id
FROM Products
WHERE change_date <= '2019-08-16')
- 8월 16일 까지는 최근 가격
- 8월 16일 안으로 갱신된 가격이 없으면 10달러
- 중복 제거를 위해 union
SELECT product_id, new_price AS price
FROM Products
WHERE (product_id, change_date) IN (SELECT product_id,MAX(change_date)
FROM Products
WHERE change_date <= '2019-08-16'
GROUP BY product_id)
union all
select product_id,10 as price
from Products
group by product_id
having min(change_date)>'2019-08-16'
- 8월 16일 이전까지는 최근 갱신 날짜 가격
- 최초 갱신 날짜가 8월 16일 이후면 10달러
- 중복 안생기므로 union all 가능
'언어' 카테고리의 다른 글
postgreSQL (0) | 2024.11.30 |
---|---|
lead (0) | 2024.07.26 |
필터링 후 리턴 없을 때 null 출력하기 (0) | 2024.07.22 |
누계 거리 순 (0) | 2024.07.18 |
case when -> having (0) | 2024.07.15 |