Here is a handy SQL snippet to select records by the half hour in a certain date range.
SELECT DATEADD(mi, DATEDIFF(mi,0,[LoginTime])/30*30,0) as LoginHour, Count(*) as NumberOfUsers FROM[my_db].[dbo].[MyTable] WHERE [LoginTime] BETWEEN '{0} 00:00:00.00' AND '{0} 23:59:59.999' GROUP BY DATEADD(mi, DATEDIFF(mi,0,[LoginTime])/30*30,0) ORDER BY DATEADD(mi, DATEDIFF(mi,0,[LoginTime])/30*30,0)
The result set will look something like this:
Here is a code to select by the hour if you don’t need to go down to the half hour
SELECT datepart(HH, [LoginTime]) as LoginHour, Count(*) as NumberOfUsers FROM[my_db].[dbo].[MyTable] WHERE[LoginTime] BETWEEN '09/07/2017 00:00:00.00' AND dateadd(dd, 1, '10/20/2017 23:59:59.999') GROUP BY datepart(HH, [LoginTime]) ORDER BY datepart(HH, [LoginTime])
And the result set will resemble this:
Here is a snipped to get a all records regardless of the date, and count by the half hour.
SELECT substring(CONVERT(VARCHAR, DATEADD(mi, DATEDIFF(mi,0,[LoginTime])/30*30,0), 108),0,6) as LoginHour, Count(*) as NumberOfUsers FROM[my_db].[dbo].[MyTable] GROUP BY substring(CONVERT(VARCHAR, DATEADD(mi, DATEDIFF(mi,0,[LoginTime])/30*30,0), 108),0,6) ORDER BY substring(CONVERT(VARCHAR, DATEADD(mi, DATEDIFF(mi,0,[LoginTime])/30*30,0), 108),0,6)