Nếu tôi hiểu bạn muốn gì, bạn có thể thực hiện việc này với hàm phân tích và điều khoản cửa sổ .
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;
Lựa chọn bên trong tính toán số trận đấu và tổng số bàn thắng trên các trận đấu đó, cho từng đội nhà / đội khách trong mỗi mùa giải, bằng cách sử dụng phiên bản phân tích của count
và sum
và mệnh đề cửa sổ rows between ...
giới hạn cả năm hàng trước, không bao gồm hàng hiện tại, mà tôi nghĩ đó là những gì bạn muốn. Lựa chọn ngoài cùng sau đó sẽ cộng các tổng có liên quan cho hai đội trong hàng hiện tại, nhưng kiểm tra cả hai số và để lại tổng số rỗng nếu một trong hai là <5. Lưu ý rằng nó chỉ đánh vào các trận đấu matches
bảng một lần.
Với một bộ lọc bổ sung ngay trước đơn đặt hàng:
where season = 2012 and homeTeam = 'Norwich' and awayteam = 'Aston Villa'
... bạn nhận được:
SEASON MATCHDATE HOMETEAM AWAYTEAM HOMEGOALS AWAYGOALS TOTALGOALS
---------- --------- ------------------------- ------------------------- ---------- ---------- ----------
2012 13-MAY-12 Norwich Aston Villa 2 0 30
Bạn có thể sử dụng điều này để cập nhật bảng cho hàng phù hợp, mặc dù nói chung tôi sẽ tính toán nó khi cần thiết để tránh các lỗi tiềm ẩn về tính toàn vẹn của dữ liệu, có thể trong một chế độ xem.