0
点赞
收藏
分享

微信扫一扫

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Button)

四月Ren间 2024-03-08 阅读 9

题目描述

leetcode题目:指定日期的产品价格
在这里插入图片描述
在这里插入图片描述

思路

  1. 找出所有的产品的指定的日期的价格;
  2. 若找不到某个产品的更改日期,则将该产品价格设置为10。

关键点:

  1. if没有16号的,怎么找到前一个日期的?==> 日期小于16号(条件1)的最大日期(条件2)。
  2. 如果没有对应日期的,则设置为10 ==> IFNULL()函数

细节详见【官方题解】

select distinct A.product_id, IFNULL(B.new_price, 10) as price 
from Products A
left join (
    select product_id, new_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
        )
    ) B
on A.product_id = B.product_id

记录自己写的错误点

-- select product_id, new_price, max(change_date)
-- from Products
-- where change_date <= '2019-08-16'
-- group by product_id 
-- '''
-- | product_id | new_price | max(change_date) |
-- | ---------- | --------- | ---------------- |
-- | 1          | 20        | 2019-08-16       |
-- | 2          | 50        | 2019-08-14       |
-- '''
-- ERROR: 其中new_price为20 错误,是因为主键是 product_id 和 change_date,而不是主键是product_id;
-- 所以要通过(product_id, change_date) 定位到对应的new_price, 再加一层嵌套。
举报

相关推荐

0 条评论