![](/img/trans.png)
[英]Most efficient way of deleting records from a view with multiple base tables?
[英]Most efficient way to create a view with distinct results from multiple rows
我在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
...
我想根據這些結果創建一個視圖,那么最有效的方法是什么? 經常會查詢該視圖,因此必須高效。
一種方法是將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;
試試這個查詢:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.