Accounting only for votes cast on questions less than 31 days after the question was created.
Q&A about the site for serious players and enthusiasts of chess
WITH UpVotesByMonth AS ( SELECT DATEADD (month, DATEDIFF (month, 0, v.CreationDate), 0) AS [Month], COUNT (v.Id) AS Votes FROM Votes v JOIN Posts p ON (p.Id = v.PostId) AND p.PostTypeId = 1 WHERE v.VoteTypeId=2 and DATEDIFF(day, p.CreationDate, v.CreationDate) < 31 GROUP BY DATEADD (month, DATEDIFF (month, 0, v.CreationDate), 0) ), DownVotesByMonth AS ( SELECT DATEADD (month, DATEDIFF (month, 0, v.CreationDate), 0) AS [Month], COUNT (v.Id) AS Votes FROM Votes v JOIN Posts p ON (p.Id = v.PostId) AND p.PostTypeId = 1 WHERE v.VoteTypeId=3 and DATEDIFF(day, p.CreationDate, v.CreationDate) < 31 GROUP BY DATEADD (month, DATEDIFF (month, 0, v.CreationDate), 0) ) SELECT v.[Month], v.Votes+dv.Votes AS 'total', v.Votes AS 'upvotes', dv.Votes AS 'downvotes' FROM UpVotesByMonth v JOIN DownVotesByMonth dv ON v.[Month] = dv.[Month] ORDER BY v.[Month]