我正在使用SQLITE。在过去的两个小时里,我一直在寻找答案,但没有成功。我当前正在处理的数据如下所示(我正在简化):
Sales_period Sales_Qty Sales_Profit
0001 15 300
0002 20 500
0003 10 200
我希望从此表中扣除以下内容: 名为Sales_Index的新列是:Sales_Profit / Sales_Qty 另一个名为Sales_Goal的新列是给定销售期间内先前Sales_Index的平均值。因此,例如,针对Sales_Period 0003的Sales_Goal将为22.5。最后,我想返回一个布尔值,该值确定在给定期间内是否满足Sales_Goal。所以我想要的输出看起来像这样:
Sales_period Sales_Qty Sales_Profit Sales_Index Sales_Goal Goal_Met
0001 15 300 20 - -
0002 20 500 25 20 Y
0003 10 200 20 22.5 N
有没有办法做到这一点?任何帮助表示赞赏。
编辑:我可以创建一个包含Sales_Index列的新表。我在那之后的步骤遇到了麻烦。
答案 0 :(得分:1)
您可以使用相关子查询进行计算:
with t as (
select t.*, (sales_profit / sales_qty) as sales_index
from mytable t
)
select t.*,
(select avg(t2.sales_index)
from t t2
where t2.sales_period < t.sales_period
) as sales_goal
from t;
在最新版本的SQLite中,您可以使用窗口函数:
select t.*, (sales_profit / sales_qty) as sales_index,
avg(sales_profit / sales_qty) over (order by sales_period rows between unbounded preceding and 1 preceding) as sales_goal
from mytable t