Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.88 KB | None | 0 0
  1. -- set up test data
  2. CREATE TABLE Games (
  3. Winner INT NOT NULL,
  4. Loser INT NOT NULL,
  5. ID INT PRIMARY KEY,
  6. CHECK (Winner <> Loser)
  7. );
  8. INSERT INTO Games VALUES
  9. (456, 123, 1),
  10. (789, 456, 2),
  11. (101112, 789, 3),
  12. (949596, 919293, 4),
  13. (103104, 101102, 5),
  14. (106107, 103104, 6); -- I assume your original screenshots had a typo
  15.  
  16. -- the actual query
  17. WITH loopy AS (
  18. SELECT g.Winner, g.Loser, Level = 1
  19. FROM Games g
  20. UNION ALL
  21. SELECT g.Winner, l.Loser, Level = l.Level + 1
  22. FROM loopy l
  23. INNER JOIN Games g
  24. ON g.Loser = l.Winner
  25. )
  26. SELECT l.Winner, g.Loser, g.ID
  27. FROM Games g
  28. INNER JOIN (
  29. SELECT l.*, Priority = ROW_NUMBER() OVER (PARTITION BY l.Loser ORDER BY l.Level DESC)
  30. FROM loopy l
  31. ) l
  32. ON l.Loser = g.Loser AND l.Priority = 1
  33. ORDER BY g.ID;
  34.  
  35. // ... snip
  36. ON l.Loser = g.Loser AND l.Priority = 1
  37. ORDER BY g.ID
  38. OPTION (MAXRECURSION 1000); -- added
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement