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