请告知我们是否需要在下面的代码中将 prev_price 设为 Null。
我需要确定 SQL 查询,该查询列出了每次更新后价格都会上涨的所有文章:
对于第二种情况,查询时应返回产品T恤和书籍。
假设:
key(产品,日期)是唯一的,即每个产品每天最多可以更改一次价格。
价格列仅包含正值。
案例1
product date price
-----------------------------
banana 2020-01-21 1
banana 2020-01-22 2
cheese 2020-01-23 1
potatoes 2020-01-21 3
potatoes 2020-01-30 3
案例2
product date price
-------------------------------
board game 2021-03-31 10
board game 2021-04-05 15
board game 2021-04-10 12
book 2021-03-31 10
book 2021-04-05 15
T-shirt 2021-03-31 10
T-shirt 2021-04-05 15
我的代码:
WITH PriceChanges AS
(
SELECT
product,
date,
price,
LAG(price) OVER (PARTITION BY product ORDER BY date) AS previous_price
FROM
your_table_name
)
SELECT DISTINCT product
FROM PriceChanges
WHERE previous_price IS NULL OR price > previous_price;
您可以对产品进行计数并过滤所有 previous_price IS NULL,其中表中只有 1 个产品
WITH PriceChanges AS
(
SELECT
product,
date,
price,
LAG(price) OVER (PARTITION BY product ORDER BY date) AS previous_price,
(SELECT COUNT(*) FROM your_table_name WHERE product = ytn.product ) cnt
FROM
your_table_name ytn
)
SELECT DISTINCT product
FROM PriceChanges
WHERE (previous_price IS NULL AND cnt = 1) OR price > previous_price;