Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 1.80 KB | None | 0 0
  1. DECLARE @startDate nvarchar(MAX);
  2.  
  3. DECLARE @endDate nvarchar(MAX);
  4.  
  5.  
  6. SET @startDate = '2020-01-07';
  7.  
  8.  
  9. SET @endDate = '2020-01-10';
  10.  
  11.  
  12. -- Esta é 2% mais rápida, mas usa coisas que eu não sei como se fazem no mysql
  13. -- Pelo que eu tive a ver, tens de fazê-las à mão, por isso se calhar até acaba por ficar mais lenta
  14.  
  15. WITH playerScoring AS
  16.   (SELECT s.PlayerId,
  17.           s.Score,
  18.           s.[Date]
  19.    FROM dbo.[Snapshot] s),
  20.      firstDateScoring AS
  21.   (SELECT TOP 1 WITH TIES *
  22.    FROM playerScoring snap
  23.    WHERE [Date] >= @startDate
  24.    ORDER BY ROW_NUMBER() OVER(PARTITION BY snap.PlayerId
  25.                               ORDER BY snap.[Date] ASC)),
  26.      secondDateScoring AS
  27.   (SELECT TOP 1 WITH TIES *
  28.    FROM playerScoring snap
  29.    WHERE [Date] <= @endDate
  30.    ORDER BY ROW_NUMBER() OVER(PARTITION BY snap.PlayerId
  31.                               ORDER BY snap.[Date] DESC))
  32. SELECT p.Id Id,
  33.        p.[Username] Player,
  34.        ss.Score - fs.Score Delta
  35. FROM dbo.[Player] p
  36. JOIN firstDateScoring fs ON fs.PlayerId = p.Id
  37. JOIN secondDateScoring ss ON ss.PlayerId = p.Id;
  38.  
  39.  
  40. -- Está é 2% mais lenta, mas é muito mais fácil de a transitar para mysql
  41. -- Já agora, copiei esta na net. Google meu puto.
  42.  
  43. SELECT score.PlayerId Id,
  44.        score.Player,
  45.        score.EndScore-score.StartScore Delta
  46. FROM
  47.   (SELECT p.Id PlayerId,
  48.           p.[Username] Player,
  49.  
  50.      (SELECT TOP 1 s.Score
  51.       FROM dbo.[Snapshot] s
  52.       WHERE s.[Date] >= @startDate
  53.         AND s.PlayerId = p.Id
  54.       ORDER BY s.[Date] ASC) AS StartScore,
  55.  
  56.      (SELECT TOP 1 s.Score
  57.       FROM dbo.[Snapshot] s
  58.       WHERE s.[Date] <= @endDate
  59.         AND s.PlayerId = p.Id
  60.       ORDER BY s.[Date] DESC) AS EndScore
  61.    FROM dbo.Player p) score
  62. WHERE score.EndScore IS NOT NULL
  63.   AND score.StartScore IS NOT NULL
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement