产品数据表: Products
Column Name | Type |
---|---|
product_id | int |
new_price | int |
change_date | date |
这张表的主键是 (product_id, change_date)。
这张表的每一行分别记录了某产品在某个日期更改后的新价格。
这道题的话就是在于对不同类型的商品做不同的处理,
- 如果在8月16日之前就已经做过修改价格的操作了,那么我们直接给出到8月16日那天或之前最近的修改结果
- 如果在8月16日之前没有做过修改价格的操作,那么直接写出10
- 最后用union将两个结果集合并
SELECT *
FROM
(
SELECT product_id, new_price AS price
FROM Products
WHERE (product_id, change_date) IN
( # 找出8月16日之前修改价格的最大日期
SELECT product_id, MAX(change_date)
FROM Products
WHERE change_date <= '2019-08-16'
GROUP BY product_id
)
UNION
SELECT DISTINCT product_id, 10 AS price
# 这里要注意去重,因为主键不全
FROM Products
WHERE product_id NOT IN
( # 找出8月16日之前没有修改的id
SELECT product_id
FROM Products
WHERE change_date <= '2019-08-16'
)
) AS n
ORDER BY price DESC