MySQL中,存在期初库存、收、发、期末库存4列多行数据并按日排序,要求第二日的期初库存值结果,自动等于上一日的期末库存值
时间: 2024-10-09 15:04:32 浏览: 15
在MySQL中,如果你有一个包含期初库存(beginning_stock)、收入(income)、支出(expense)和期末库存(ending_stock)的数据表,按照日期排序,想要计算出每天的期初库存(beginning_stock)等于前一天的期末库存(ending_stock),你可以使用窗口函数(Window Functions)来实现。假设你的表名为`stock_daily`,字段包括`date`, `beginning_stock`, `income`, 和 `expense`,你可以这样做:
```sql
CREATE TEMPORARY TABLE IF NOT EXISTS temp_stock AS
SELECT
date,
SUM(income - expense) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) as daily_change,
ending_stock AS beginning_stock
FROM stock_daily
WHERE date = DATE_SUB(CURDATE(), INTERVAL 1 DAY); -- 计算昨天的结束库存
UPDATE stock_daily sd
JOIN temp_stock ts ON sd.date = ts.date + 1
SET sd.beginning_stock = ts.beginning_stock;
```
首先,我们创建一个临时表`temp_stock`,通过窗口函数计算每日的库存变动(扣除支出加上收入)。然后,我们将这个临时表与原始表联接,找到每天的第一行(即今天的开始时间),将上一天的结束库存作为第二天的期初库存。
注意:这个查询假设每一天只有一条记录。如果有多条记录,你需要进一步处理合并情况,可能需要使用GROUP BY。