[英]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.