题目链接:点击打开链接
题目大意:略。
解题思路:注意解决方案(1)通过时间比较来筛选排名的技巧;然而解决方案(2)在第 5 个测试用例中失败,但是不知道哪里思路有问题,望高手指出~
AC 代码
-- 解决方案(1)
select user_id seller_id, if(favorite_brand = item_brand, 'yes', 'no') 2nd_item_fav_brand
from users left join (
select o1.seller_id, item_brand
from orders o1
join orders o2
on o1.seller_id = o2.seller_id
join items i
on o1.item_id = i.item_id
group by o1.order_id
having sum(o1.order_date > o2.order_date) = 1
) tmp
on user_id = seller_id
-- 解决方案(2)
WITH t1 AS(SELECT user_id, order_date, i.item_id iItemId, o.item_id oItemId, ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY order_date) rw
FROM Users u LEFT JOIN Items i ON u.favorite_brand = i.item_brand LEFT JOIN Orders o ON u.user_id = o.seller_id),
t2 AS(SELECT user_id seller_id, IF(oItemId = iItemId, 'yes', 'no') 2nd_item_fav_brand FROM t1 WHERE rw = 2)
SELECT user_id seller_id, IFNULL(2nd_item_fav_brand, 'no') 2nd_item_fav_brand
FROM Users u LEFT JOIN t2 ON u.user_id = t2.seller_id