我有一個看起來像這樣的資料庫:
| ID | Sale_Date(YYYY-MM-DD) | 總容積 |
|---|---|---|
| 123 | 2022-01-01 | 0 |
| 123 | 2022-01-02 | 2 |
| 123 | 2022-01-03 | 5 |
| 456 | 2022-04-06 | 38 |
| 456 | 2022-04-07 | 40 |
| 456 | 2022-04-08 | 45 |
我想從 Total Volume 中獲取每日銷售列。這只是通過將日期 x 的總交易量與每個 id 的日期 x-1 的總交易量相減。
| ID | Sale_Date(YYYY-MM-DD) | 總容積 | Daily_Sale |
|---|---|---|---|
| 123 | 2022-01-01 | 0 | 0 |
| 123 | 2022-01-02 | 2 | 2 |
| 123 | 2022-01-03 | 5 | 3 |
| 456 | 2022-04-06 | 38 | 38 |
| 456 | 2022-04-07 | 40 | 2 |
| 456 | 2022-04-08 | 45 | 5 |
我最初的嘗試是使用排名函式和自我加入,但結果并不正確。
with x as (
select
distinct t1.ID,
t1.Sale_Date,
t1.Total_volume,
rank() over (partition by ID order by Sale_Date) as ranker
from t t1 order by t1.Sale_Date)
select t2.ID, t2.ranker, t2.Sale_date, t1.Total_volume, t1.Total_volume - t2.Total_volume as Daily_sale
from x t1, x t2 where t1.ID = t2.ID and t2.ranker = t1.ranker-1 order by t1.ID;
uj5u.com熱心網友回復:
你應該使用:
LAG檢索最后一個“ Sale_Date ”值的視窗函式- 將每個前行的
COALESCENULL 替換為“ Total Volume ”的功能
如果 的值為NULL Total_Volume,則從先前的值中減去并合并。Total_VolumeLAG
SELECT *,
COALESCE(`Total_Volume`
-LAG(`Total_Volume`) OVER(PARTITION BY `ID`
ORDER BY `Sale_Date(YYYY-MM-DD)`), `Total_Volume`) AS `Daily_Sale`
FROM tab
在此處查看演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518132.html
標籤:mysqlsql
