Я не уверен, что это правильно, любой может вести меня по этому вопросу. Я пытаюсь получить мой номер гостевого знака в день в течение 1 месяца, но там привязан к какому-то пустому графу, где ни один не подписывать. Так что результат будет, какSQL WITH CLAUSE для DATERANGE Выберите
DATE | COUNT
2013-12-01 2
2013-12-05 4
Но что я хотел это
DATE | COUNT
2013-12-01 2
2013-12-02 0
2013-12-03 0
2013-12-04 0
2013-12-05 4
, так что я нашел на этом сайте, чтобы использовать рекурсивную дату генерации, а затем логически я решил выбрать конечный результат даты и присоединиться к моему члену выбрать.
DECLARE @startDate DATE
DECLARE @endDate DATE
SET @startDate = '2013-12-01'
SET @endDate = '2014-01-01'
;
WITH dates(Date) AS
(
SELECT @startdate as Date
UNION ALL
SELECT DATEADD(d,1,[Date])
FROM dates
WHERE DATE < @enddate
)
SELECT 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 dates.Date asc
Но я столкнуться с ошибкой, как dates.Date недопустим в списке выбора, поскольку он не содержится ни в статистической функции или предложения GROUP BY. Кто-нибудь может направить меня на это или есть лучший способ сделать это? Заранее спасибо
я попробовать последний метод из sgeddes, что я получил почти правильно за 1-й день, за исключением месяца всегда будет давать мне двойной счет. Например. 2013-12-01 должен иметь 5 счет, но результат покажет мне 10 очков. Я стараюсь использовать все другое время входа и первый день всегда будет возвращать мне двойной счет. Любая идея почему? – user2378645