簡體   English   中英

如何從上一行的相同列值中選擇列值最近減少的行?

[英]How do I select row with the most recent reduction in a column value from same columns value in previous row?

我有一組庫存數據,其中數量以給定速率增加。 例如,庫存每天增加十個單位。 但是,有時會減少任何數量的庫存。 我需要一個查詢,該查詢可以找到我最近的庫存減少量並向我返回扣除額的總和。

我的表格中包含許多商品ID的日期和金額。 從理論上講,我要嘗試為給定項目ID選擇所有金額和日期,然后查找兩天庫存之間最近一次減少之間的差異。 由於會跟蹤多個項目,因此不能保證id列對於一組項目是連續的。

尋找解決方案的研究已經完全不堪重負。 似乎窗口函數可能是一個不錯的嘗試,但是我從未使用過它們,甚至沒有真正從何處開始的概念。

雖然我可以輕松地返回金額並使用PHP進行計算,但是我覺得在這里要做的正確的事情是利用SQL,但是我對更復雜的查詢的經驗有限。

ID | ItemID | Date       | Amount 
1      2      2019-05-05   25
7      2      2019-05-06   26
34     2      2019-05-07   14
35     2      2019-05-08   15
67     2      2019-05-09   16
89     2      2019-05-10   5
105    2      2019-05-11   6

鑒於以上數據,很高興看到如下結果:

item id | date       | reduction
2         2019-05-10   11

這是因為最近的庫存減少在ID 67和89之間,並且減少的數量在2019年5月10日為11。

在MySQL 8+中,您可以使用lag()

select t.*, (prev_amount - amount) as reduction
from (select t.*,
             lag(amount) over (partition by itemid order by date) as prev_amount
      from t
     ) t
where prev_amount > amount
order by date desc
limit 1;

暫無
暫無

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

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