基于两个连续的日期和乘积减去乘积值,在MySQL中返回一个称为乘积差值的新列

问题描述 投票:1回答:2

我有一张下表。

enter image description here

现在我需要类似下面的输出。

enter image description here

现在,我需要根据产品分组依据显示连续日期之间的产品差异。例如:在Apple循环中,第一行应返回默认值3,然后下一行应返回差值。同样,该代码应适用于下一个产品Samsung循环。然后,结果应传递到新列中,如所需输出中所示。

我对MySQL完全陌生,但是我已尽力使用联接来获得所需的输出,但是我不知道从哪里开始。请引导我了解这个新概念。

下面是我尝试过的代码。

CREATE TABLE products (
id  numeric,
product text,
date_value DATE,
prod_value numeric);

INSERT INTO products(id, product, date_value, prod_value)
VALUES(1, 'Apple', '2018-01-22', 3);

INSERT INTO products(id, product, date_value, prod_value)
VALUES(2, 'Apple', '2018-01-23', 6);

INSERT INTO products(id, product, date_value, prod_value)
VALUES(3, 'Apple', '2018-01-24', 7);

INSERT INTO products(id, product, date_value, prod_value)
VALUES(4, 'Samsung', '2018-01-22', 1);

INSERT INTO products(id, product, date_value, prod_value)
VALUES(5, 'Samsung', '2018-01-23', 5);

SELECT
      current.prod_value,(current.prod_value - previous.prod_value) diff
FROM
      products previous
JOIN 
      products current
ON
      current.id = previous.id+1;
mysql sql join group-by
2个回答
1
投票

您可以使用相关子查询(对于较旧的版本),如果您正在以MySQL的较新版本运行,则可以使用lag()

select p.*, 
       p.prodvalue - (select coalesce(p2.prodvalue, 0)
                      from product p1
                      where p1.product = p.product and p1.id < p.id
                            order by p1.id desc
                      limit 1
                     ) as proddiff
from product p;

1
投票

使用lag()

select p.*,
       (p.prod_value -
        lag(p.prod_value, 1, 0) over (partition by product order by date_value)
       ) as prod_diff
from products p;
© www.soinside.com 2019 - 2024. All rights reserved.