Я хочу сравнить сгруппированные по значениям значения отдельных строк.
По сравнению с вопросом, на который мне ответили 2 дня назад Создание 2 столбцов для 2 разных групп по функциям в одной таблице , теперь я хочу иметь возможность рассчитывать только среднюю оценку для значений даты, которые ниже значения даты для конкретной строки.
Представьте себе следующую таблицу (называемую game_team_rating)
team_id match_performance_rating opponent_rating date
1 500 700 2019-05-01
1 400 625 2019-05-02
2 600 400 2019-05-02
3 500 525 2019-05-03
2 400 200 2019-05-03
Конечный результат теперь должен выглядеть примерно так:
team_id date match_pr avg_over_500 avg_less_500
1 2019-05-01 500 Null Null
1 2019-05-02 400 500 Null
2 2019-05-02 600 Null Null
3 2019-05-03 500 Null Null
2 2019-05-03 400 Null 400
Таким образом, столбцы avg_over_500 и avg_less_500 будут смотреть только результаты предыдущих сыгранных матчей.
Я думал о том, чтобы попробовать код, подобный этому:
select
gtr.team_id,
gtr.match_performance_rating,
g.avg_pm_opp_over_500,
g.avg_pm_opp_less_500
from game_team_rating gtr inner join (
select
team_id,
avg(case when opponent_rating > 500 and gtr.date > date then match_performance_rating end) avg_pm_opp_over_500,
avg(case when opponent_rating <= 500 and gtr.date > date then match_performance_rating end) avg_pm_opp_less_500
from game_team_rating
group by team_id
) g on g.team_id = gtr.team_id
Однако это, очевидно, не работает, потому что нет разделения между датой для сгруппированных значений и для каждой строки.