gpt4 book ai didi

MySQL 近期产品价格更新的百分比变化

转载 作者:行者123 更新时间:2023-11-29 02:51:36 25 4
gpt4 key购买 nike

我想显示价格上涨或下跌的 10 个最近更新的产品,并显示它们的变化百分比(+/- 百分比),并忽略当前低价和先前低价的产品是相同的,也忽略没有以前低价的产品,例如只有一个价格记录的产品。

price_table(价格上涨或下跌)

id      prod_id price   store   added
----------------------------------------------------
1000 462 2.00 4 2016-01-27 00:54:47
807 462 3.09 2 2016-01-22 15:06:20
720 462 3.49 2 2016-01-16 09:31:01
608 462 2.89 2 2016-01-15 14:09:58

在这里我们看到最低价格是 2.89所以当3.49插入价格差异本来是+17.19%然后 3.09被插入所以与先前低价的差异3.49-12.94%然后是最近的低价2.00被插入所以现在新的最低价差来自3.09-35.28% .

price   store   percent_change
-------------------------------
2.89 2
3.49 2 +17.19%
3.09 2 -12.94%
2.00 4 -35.28%

percent_change 在这里不断变化,因为前 3 个价格是唯一可用的价格,而且它们来自一家商店。

约束

price_table(最低价永远不变)

id      prod_id price   store   added
----------------------------------------------------
140 140 19.99 1 2016-01-15 14:09:30
394 140 20.99 2 2016-01-15 14:09:48
991 140 24.99 4 2016-01-27 00:54:47
1361 140 21.49 2 2016-01-29 19:53:30

如上表所示,最低价格为19.99作为商店 1添加后没有更新,还有 3 个其他价格条目,但它们都在 19.99 之上并且在这个最低价格之后,所以这个产品没有以前的最低价格可以使用,所以这些产品应该被忽略。

price_table(两家店最低价相同)

id      prod_id price   store   added
----------------------------------------------------
1280 374 8.99 5 2016-01-29 00:45:59
1247 374 10.49 2 2016-01-27 18:13:33
803 374 10.99 2 2016-01-22 15:06:20
374 374 8.99 1 2016-01-15 14:09:44

在这里您会看到最低价格是 8.99一开始和最近的价格是8.99同样,这些产品也应该被忽略。

当前逻辑

((当前最低价 - 之前最低价)/之前最低价) * 100

当前 SQL

SELECT pr1.prod_id AS product
, (((pr1.price - (SELECT price
FROM price
ORDER BY price ASC
LIMIT 1,1)) / pr1.price) * 100) AS diff
FROM price pr1
ORDER BY pr1.price ASC;

SQLFiddle

我似乎无法理解正确的逻辑,非常感谢任何帮助。

最佳答案

使用用户定义的变量 @prev_prod_id@prev_price 来跟踪之前的 prod_id 和价格。

使用以下查询获取要过滤掉的 prod_id:

select distinct a.prod_id
from (
select prod_id, min(price) price, min(added) added
from price a
group by prod_id) a
join price b on a.added = b.added and a.price = b.price

一起:

select a.prod_id, a.price, a.store, 
@prev_prod_id, @prev_price,1-@prev_price/a.price,
if(@prev_prod_id = a.prod_id, 1-@prev_price/a.price, null)
*if(@prev_price:=a.price,1,1)
*if(@prev_prod_id:=a.prod_id,1,1) diff
from price a
join (select @prev_prod_id:=null, @prev_price:=null) b
left join (
select distinct a.prod_id
from (
select prod_id, min(price) price, min(added) added
from price a
group by prod_id) a
join price b on a.added = b.added and a.price = b.price) c on a.prod_id = c.prod_id
where c.prod_id is null
order by a.prod_id, a.added;

fiddle

关于MySQL 近期产品价格更新的百分比变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com