【Leetcode】高频SQL基础题--1164.指定日期的产品价格

【Leetcode】高频SQL基础题--1164.指定日期的产品价格

复制代码
要求:一开始,所有产品价格都为 10。编写一个解决方案,找出在 2019-08-16 所有产品的价格。
以 任意顺序 返回结果表。

解题思路:

找到 2019-08-16 前所有有改动的产品及其最新价格,如果没有更新那就是原始价格。

1、子查询:先找到所有的产品;

2、子查询:再找到所有 2019-08-16 前有修改的产品和他们最新的价格;

3、使用 左连接left join 将两个查询联合。使用ifnull(p2.new_price, 10)如果产品没有价格,说明没有修改过,设置为 10,如果有价格,设置为最新的价格。

代码:

sql 复制代码
select 
    p1.product_id, 
    ifnull(p2.new_price, 10) as price
from (
    select distinct product_id
    from products
) as p1
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
    )
) as p2 
on p1.product_id = p2.product_id
相关推荐
Swift社区6 小时前
Swift 解法详解:LeetCode 371《两整数之和》
开发语言·leetcode·swift
Swift社区6 小时前
Swift 解法详解 LeetCode 362:敲击计数器,让数据统计更高效
开发语言·leetcode·swift
jnrjian7 小时前
v$lock TS lock id1 用于发现Oracle pdb不能关闭的sid
sql·oracle
小刘的AI小站9 小时前
leetcode hot100 二叉搜索树
算法·leetcode
自信的小螺丝钉9 小时前
Leetcode 876. 链表的中间结点 快慢指针
算法·leetcode·链表·指针
红豆怪怪9 小时前
[LeetCode 热题 100] 32. 最长有效括号
数据结构·python·算法·leetcode·动态规划·代理模式
参.商.9 小时前
【Day21】146.LRU缓存 (Least Recently Used)
leetcode·缓存·golang
愚润求学9 小时前
【贪心算法】day6
c++·算法·leetcode·贪心算法
l5657589 小时前
第五十四天(SQL注入&数据类型&参数格式&JSON&XML&编码加密&符号闭合&复盘报告)
sql