Eu fiz um SQL Fiddle para esta questão, se isso facilitar as coisas para qualquer um.
Eu tenho uma espécie de banco de dados de esportes de fantasia e o que estou tentando descobrir é como obter dados de "seqüência atual" (como 'W2' se o time venceu suas últimas 2 partidas ou 'L1' se eles perderam seu último confronto após vencer o confronto anterior - ou 'T1' se empataram no confronto mais recente).
Aqui está o meu esquema básico:
CREATE TABLE FantasyTeams (
team_id BIGINT NOT NULL
)
CREATE TABLE FantasyMatches(
match_id BIGINT NOT NULL,
home_fantasy_team_id BIGINT NOT NULL,
away_fantasy_team_id BIGINT NOT NULL,
fantasy_season_id BIGINT NOT NULL,
fantasy_league_id BIGINT NOT NULL,
fantasy_week_id BIGINT NOT NULL,
winning_team_id BIGINT NULL
)
Um valor de NULL
na winning_team_id
coluna indica um empate para essa partida.
Aqui está um exemplo de declaração DML com alguns dados de amostra para 6 equipes e 3 semanas de confrontos:
INSERT INTO FantasyTeams
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
INSERT INTO FantasyMatches
SELECT 1, 2, 1, 2, 4, 44, 2
UNION
SELECT 2, 5, 4, 2, 4, 44, 5
UNION
SELECT 3, 6, 3, 2, 4, 44, 3
UNION
SELECT 4, 2, 4, 2, 4, 45, 2
UNION
SELECT 5, 3, 1, 2, 4, 45, 3
UNION
SELECT 6, 6, 5, 2, 4, 45, 6
UNION
SELECT 7, 2, 6, 2, 4, 46, 2
UNION
SELECT 8, 3, 5, 2, 4, 46, 3
UNION
SELECT 9, 4, 1, 2, 4, 46, NULL
GO
Aqui está um exemplo da saída desejada (com base no DML acima) que estou tendo problemas até mesmo para descobrir como derivar:
| TEAM_ID | STEAK_TYPE | STREAK_COUNT |
|---------|------------|--------------|
| 1 | T | 1 |
| 2 | W | 3 |
| 3 | W | 3 |
| 4 | T | 1 |
| 5 | L | 2 |
| 6 | L | 1 |
Eu tentei vários métodos usando subconsultas e CTEs, mas não consigo juntar. Eu gostaria de evitar o uso de um cursor, pois poderia ter um grande conjunto de dados para executar isso no futuro. Sinto que pode haver uma maneira envolvendo variáveis de tabela que unem esses dados a si mesmos de alguma forma, mas ainda estou trabalhando nisso.
Informações Adicionais: Pode haver um número variável de equipes (qualquer número par entre 6 e 10) e o total de confrontos aumentará em 1 para cada equipe a cada semana. Alguma ideia de como devo fazer isso?