Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- set up test data
- CREATE TABLE Games (
- Winner INT NOT NULL,
- Loser INT NOT NULL,
- ID INT PRIMARY KEY,
- CHECK (Winner <> Loser)
- );
- INSERT INTO Games VALUES
- (456, 123, 1),
- (789, 456, 2),
- (101112, 789, 3),
- (949596, 919293, 4),
- (103104, 101102, 5),
- (106107, 103104, 6); -- I assume your original screenshots had a typo
- -- the actual query
- WITH loopy AS (
- SELECT g.Winner, g.Loser, Level = 1
- FROM Games g
- UNION ALL
- SELECT g.Winner, l.Loser, Level = l.Level + 1
- FROM loopy l
- INNER JOIN Games g
- ON g.Loser = l.Winner
- )
- SELECT l.Winner, g.Loser, g.ID
- FROM Games g
- INNER JOIN (
- SELECT l.*, Priority = ROW_NUMBER() OVER (PARTITION BY l.Loser ORDER BY l.Level DESC)
- FROM loopy l
- ) l
- ON l.Loser = g.Loser AND l.Priority = 1
- ORDER BY g.ID;
- // ... snip
- ON l.Loser = g.Loser AND l.Priority = 1
- ORDER BY g.ID
- OPTION (MAXRECURSION 1000); -- added
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement