【发布时间】:2021-11-02 21:20:08
【问题描述】:
我的代码有什么问题?
问题:
表:产品:product_id |新价格 |更改日期
(product_id, change_date) 是这个表的主键。 此表的每一行都表示某些产品的价格在某个日期更改为新价格。
编写 SQL 查询以查找 2019-08-16 的所有产品的价格。假设所有产品在任何变化之前的价格都是 10。
我的解决方案:
WITH cte1 AS (
SELECT product_id,
new_price AS price,
MAX(change_date) AS new_change_date
FROM Products
WHERE change_date <= CAST('2019-08-16' AS DATE)
GROUP BY product_id
),
cte2 AS (
SELECT product_id,
(new_price - 10) AS price,
MIN(change_date) AS new_change_date
FROM Products
WHERE change_date > CAST('2019-08-16' AS DATE)
GROUP BY product_id
)
SELECT DISTINCT product_id,
price
FROM cte1
UNION ALL
SELECT DISTINCT product_id,
price
FROM cte2
WHERE NOT EXISTS (SELECT product_id from cte1
WHERE cte2.product_id = cte1.product_id)
我的输出:
{"headers": ["product_id", "price"], "values": [[**1, 20**], [2, 50], [3, 10]]}
预期:
{"headers": ["product_id", "price"], "values": [[**1, 35**], [2, 50], [3, 10]]}
【问题讨论】:
标签: sql union common-table-expression