如何获得过去6个月的平均值

时间:2016-10-27 12:44:31

标签: sql oracle

我在计算变量时遇到问题。让我们假设我们有一个ID,日期和工资表。现在我的任务是找出每个日期过去6个月的平均工资。有没有其他可能性如何获得这个值而不是笛卡尔积?

我提议的决议:

select ID, Date, AVG(Salary2)
from
(
select tab1.ID as ID, tab1.Date as Date, tab2.Date as Date2, tab2.Salary as Salary2
from table tab1
**JOIN**
(select ID, Date, Salary from table) tab2
on tab1.ID = tab2.ID
and tab1.Date >= tab2.Date
and add_months(tab2.Date, 5) >= tab1.Date
) group by ID, Date;

我认为这种方法无效。我认为就大桌而言太耗时了。

还有其他方法吗?或者我该如何优化这个脚本?

谢谢

1 个答案:

答案 0 :(得分:1)

你问的不是很清楚,但我认为你正在寻找这个:

select ID, Date, 
  AVG(Salary2) OVER (
     PARTITION BY ID 
     ORDER BY DATE 
     RANGE BETWEEN INTERVAL '6' MONTH PRECEDING AND CURRENT ROW)
from table tab1;

或作为捷径:

select ID, Date, 
  AVG(Salary2) OVER (
     PARTITION BY ID 
     ORDER BY DATE 
     RANGE INTERVAL '6' MONTH PRECEDING)
from table tab1;
相关问题