一个表中有日期,股票名,买入卖出标志,单价,数量,总价。怎么用sql计算加权成本。某日加权成本的计算逻辑为,(某日及改日之前所有买入的总金额-某日加权成本*卖出数量))/(买入总数量-卖出总数量)
时间: 2024-03-11 20:51:13 浏览: 63
假设该表为 stock_trade,包含列:日期(date)、股票名(stock_name)、买入卖出标志(buy_sell_flag)、单价(price)、数量(quantity)、总价(total_price)。
可以使用以下 SQL 语句计算某一天的加权成本:
```
SELECT date, stock_name, SUM(total_price) / SUM(quantity) AS weighted_cost
FROM (
SELECT
t1.date,
t1.stock_name,
t1.buy_sell_flag,
t1.price,
t1.quantity,
SUM(
CASE
WHEN t2.buy_sell_flag = 'B' THEN t2.total_price
WHEN t2.buy_sell_flag = 'S' THEN -1 * t2.total_price
END
) OVER (
PARTITION BY t1.date, t1.stock_name
ORDER BY t2.date, t2.buy_sell_flag
) AS total_cost
FROM stock_trade t1
LEFT JOIN stock_trade t2
ON t1.stock_name = t2.stock_name
AND t1.date >= t2.date
) t
WHERE buy_sell_flag = 'S'
GROUP BY date, stock_name;
```
该 SQL 语句中使用了子查询和窗口函数。首先,子查询中使用了左连接和窗口函数对每个股票在每个日期的买入总金额进行累加,并命名为 total_cost。然后,外层查询筛选出卖出的交易记录(buy_sell_flag = 'S'),并按日期和股票分组计算加权成本。具体计算方法为:总金额减去卖出数量乘以加权成本,再除以剩余的买入数量。
需要注意的是,该 SQL 语句中假设买入卖出标志为 'B' 和 'S',需要根据实际情况进行调整。同时,如果存在多个股票,可能需要再添加一层外层查询进行分组。
阅读全文