我在Oracle中有一个表,有100.000多行。 该表有40多个变量:
var1 var2 var3 var4 var5 ... varN
1 10 1.1.2011 2 1
1 10 1.2.2011 3 2
2 10 1.5.2012 2 1
2 20 1.1.2013 3 2
2 20 1.3.2013 6 3
3 10 .. .. ..
4 10
4 10
4 10
4 20
4 30
4 30
5 10
6 10
7 10
7 20
...
我想要得到的结果是每个唯一的var1的不同var2:
var1 var2
1 10
2 10
2 20
3 10
4 10
4 20
4 30
...
和每个不同var2的同一行中最早的日期(var3)和var5 和每个不同的var2的最大var4
结果应该是:
var1 var2 var3 var4 var5 ... varM
1 10 1.1.2011 3 1
2 10 1.5.2012 2 1
2 20 1.1.2013 6 2
...
我想从这些结果中创建一个视图,那么最有效的方法是什么?该视图将经常被查询,因此必须高效。
答案 0 :(得分:3)
一种方法是使用row_number()
和条件聚合:
select var1, var2,
min(var3) as var3,
max(case when seqnum = 1 then var4 end) as var4
max(var5) as var5
from (select t.*,
row_number() over (partition by var1, var2 order by var3) as seqnum
from t
) t
group by var1, var2;
您也可以使用first
:
select var1, var2,
min(var3) as var3,
min(var4) keep (dense_rank first order by var3) as var4,
max(var5) as var5
from t
group by var1, var2;
答案 1 :(得分:0)
尝试此查询:
SELECT tab.var1,tab.var2,tab.var3,tab.var4,t.var5,...,t.varN FROM
(SELECT var1,var2,MIN(var3) as var3,MAX(var4) as var4 FROM TABLE1 GROUP BY var1,var2)tab
INNER JOIN TABLE1 t ON tab.var1 = t.var1 and tab.var2 = t.var2 and tab.var3 = t.var3