You are grouping by DATEPART(d, dates.Date)
but selecting dates.date
. I think you want something like this:
SELECT DATEPART(d, dates.Date), COUNT(Guest.Identity)
FROM [Membership].[dbo].[Guest]
right join dates on
Dates.Date = Guest.SignInDateTime and
Guest.SignInDateTime >= @startdate and
Guest.SignInDateTime < @enddate and
DATEPART(hh, Guest.SignInDateTime) >= 10 and
DATEPART(hh, Guest.SignInDateTime) <= 13
GROUP BY DATEPART(d, dates.Date)
ORDER BY DATEPART(d, dates.Date) asc
Relooking over your sql, assuming SignInDateTime
contains a timestamp, then this query might not return your desired results since Dates.Date
is just a date. Perhaps you're actually looking to join on just the date (and as Gordon pointed out, group by the dates.date
):
SELECT dates.Date, COUNT(Guest.Identity)
FROM Dates left join [Membership].[dbo].[Guest] on
Dates.Date = cast(Guest.SignInDateTime as date) and
Guest.SignInDateTime >= @startdate and
Guest.SignInDateTime < @enddate and
DATEPART(hh, Guest.SignInDateTime) >= 10 and
DATEPART(hh, Guest.SignInDateTime) <= 13
GROUP BY dates.Date
ORDER BY dates.Date asc