高级农民
- 积分
- 2468
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2019-9-4
- 最后登录
- 1970-1-1
|
试着写了下大致思路可以试试,不会用function方法可能比较笨,有些细节可能有typo什么的:
1. order records by restaurant and visit date
with cte1 as
(select *, row_number() over (partition by restaurant_id order by visit) as rn from restaurant)
2. find the gaps >=3 days without visits
with cte2 as
(select t1.*, row_number() over (partition by restaurant order by rn) as dish_order
from cte1 t1
left join cte1 t2
on t1.restaurant_id=t2.restaurant_id and t1.rn=t2.rn+1
where date_diff(t1.visit,t2.visit)>=3). 1point 3acres
3. assign food to gap dates
with cte3 as
(select * from cte2
join (select max(food_id) as max_id from food)
on 1=1)
with cte4 as
(select t1.*,t2.visit as next_gap,food.* from cte3 t1. From 1point 3acres bbs
left join cte3 t2. Χ
on t1.restaurant_id=t2.restaurant_id and t1.dish_order=t2.dish_order-1
left join food
on mod(t1.dish_order,t1.max_id)=food.food_id)
4. get the results. Waral dи,
select t1.*,t2.food from restaurant t1-baidu 1point3acres
left join cte4 t2
on t1.restaurant_id=t2.restaurant_id and t1.visit>=t2.visit and t1.visit<t2.next_gap |
|