【问题标题】:Subtract product values based on two consecutive dates and product, return a new column called product difference values in MySQL根据两个连续的日期和产品减去产品值,在 MySQL 中返回一个称为产品差异值的新列
【发布时间】:2020-04-05 13:37:26
【问题描述】:

我有一张下表。

现在我需要如下输出。

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

我对 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


    【解决方案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;
    

    【讨论】:

    • 在我的 MySQL Workbench 中运行查询时出现此错误“对于此服务器版本,选择在此位置无效”。我该如何解决这个问题?谢谢老哥
    【解决方案2】:

    使用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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-24
      • 2021-07-04
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多