必要なものがわかった場合は、分析関数
および
select season, matchdate, hometeam, awayteam, homegoals, awaygoals,
case when home_cnt >= 5 and away_cnt >= 5 then
home_tot + away_tot
else null end as totalgoals
from (
select season, matchdate, hometeam, awayteam, homegoals, awaygoals,
count(*) over (partition by season, hometeam
order by matchdate
rows between 5 preceding and 1 preceding) as home_cnt,
sum(homegoals + awaygoals) over (partition by season, hometeam
order by matchdate
rows between 5 preceding and 1 preceding) as home_tot,
count(*) over (partition by season, awayteam
order by matchdate
rows between 5 preceding and 1 preceding) as away_cnt,
sum(homegoals + awaygoals) over (partition by season, awayteam
order by matchdate
rows between 5 preceding and 1 preceding) as away_tot
from matches
)
order by season, matchdate, hometeam, awayteam;
内側の選択では、分析バージョンのcount
を使用して、各シーズンのホーム/アウェイチームごとに、試合数と試合全体のゴールの総数を計算します。 およびsum
、およびウィンドウ句rows between ...
の間にあります 現在の行を除いて、両方を前の5つに制限します。これは、あなたが望むものだと思います。次に、外側の選択により、現在の行の2つのチームに関連する合計が加算されますが、両方のカウントがチェックされ、どちらかが5未満の場合は合計がnullのままになります。matches
にのみヒットすることに注意してください。 テーブル1回。
注文の直前に追加のフィルターを使用:
where season = 2012 and homeTeam = 'Norwich' and awayteam = 'Aston Villa'
...取得:
SEASON MATCHDATE HOMETEAM AWAYTEAM HOMEGOALS AWAYGOALS TOTALGOALS
---------- --------- ------------------------- ------------------------- ---------- ---------- ----------
2012 13-MAY-12 Norwich Aston Villa 2 0 30
これを使用して、一致する行のテーブルを更新できますが、通常は、ビュー内で発生する可能性のあるデータ整合性エラーを回避するために、必要に応じて計算します。