簡體   English   中英

根據兩個連續的日期和產品減去產品值,在 MySQL 中返回一個名為產品差異值的新列

[英]Subtract product values based on two consecutive dates and product, return a new column called product difference values in MySQL

我有一個下表。

在此處輸入圖像描述

現在我需要 output 如下所示。

在此處輸入圖像描述

現在我需要根據產品分組顯示連續日期之間的產品差異。 例如:在 Apple 循環中,第一行應返回默認值 3,然后下一行應返回差值。 同樣,代碼應該適用於下一個產品三星循環。 然后,應將結果傳遞到所需的 output 中顯示的新列中。

我對 MySQL 完全陌生,但是,我已盡力使用連接來獲得所需的 output,但我不知道從哪里開始。 請指導我了解這個新概念。

以下是我嘗試過的代碼。

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的新版本,那么您可以使用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;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM