一、完整建表 SQLMySQL 语法CREATE TABLE Products( product_id INT, new_price INT, change_date DATE, PRIMARY KEY (product_id, change_date) --联合主键 ); (product_id, change_date) 是此表的主键具有唯一值的列组合。 这张表的每一行分别记录了 某产品 在某个日期 更改后 的新价格。INSERT INTO Products (product_id, new_price, change_date) VALUES (1, 20, 2019-08-14), (2, 50, 2019-08-14), (1, 30, 2019-08-15), (1, 35, 2019-08-16), (2, 65, 2019-08-17), (3, 20, 2019-08-18);二、需求一开始所有产品价格都为 10。编写一个解决方案找出在2019-08-16所有产品的价格。以任意顺序返回结果表。结果格式如下例所示。三、 思路与解题使用前几个例题讲解过的 union 关键词来做这道题很简单把表的提取拆分为两个逻辑第 1 部分拿到 8‑16 之前有更新的产品最终价格 和 第 2 部分取出 8‑16 前从来没有修改过价格的产品默认价格 10内层子查询GROUP BY product_id获取每个产品在2019‑08‑16之前最晚的修改日期返回格式(product_id,最后修改日期)外层利用元组匹配只有product_id和change_date同时匹配内层结果取出对应的new_price也就是截止 8‑16 最新价格# Write your MySQL query statement below select product_id,new_price price from Products where (product_id,change_date) in ( select product_id, MAX(change_date) from Products where change_date2019-08-16 group by product_id ) union select product_id,10 price from Products where (product_id) not in ( select product_id from Products where change_date2019-08-16 group by product_id )