@
cau1iflower ```
SELECT item_id, price,
-- 如果当前价格和前一个价格不同,那么这个价格的起始时间就是当前日期。
-- 否则,起始时间就是前一个价格的起始时间。
CASE WHEN price != LAG(price) OVER (PARTITION BY item_id ORDER BY date)
THEN date
ELSE LAG(start_date) OVER (PARTITION BY item_id ORDER BY date)
END AS start_date,
-- 如果当前价格和后一个价格不同,那么这个价格的结束时间就是后一个价格的起始时间。
-- 否则,这个价格的结束时间就是 NULL 。
CASE WHEN price != LEAD(price) OVER (PARTITION BY item_id ORDER BY date)
THEN LEAD(start_date) OVER (PARTITION BY item_id ORDER BY date)
ELSE NULL
END AS end_date
FROM prices
```