нулевой результат для среднего числа дней по месяцам - PullRequest
0 голосов
/ 17 июня 2019
select a.clientid, a.CaseType, b.EnrollmentStartDate, a.EligibilityStartDate, datediff(day, a.EligibilityStartDate, b.EnrollmentStartDate) as date_diff         
INTO ##temptable1 
FROM dbo.Client a, dbo.ClientEnrollment b
WHERE a.ClientId = b.ClientId 
AND a.CaseType = 99
ORDER BY a.ClientId



select avg (date_diff) from ##temptable1

таким образом, приведенный выше запрос дает мне общее среднее количество дней, которое требуется клиенту, чтобы зарегистрироваться в программе с даты начала его участия. Теперь я хочу отсортировать результаты по месяцам

select avg (date_diff) from ##temptable1 
where EligibilityStartDate = '2019-03-01

по какой-то причине я получаю NULL независимо от того, какую дату я указываю (хотя исходный запрос дает результаты более 40 тыс.), Я пытался вставить EligibilityStartDate = '2019-03-01' в саму таблицу, но это тоже не сработало.

1 Ответ

2 голосов
/ 17 июня 2019

Предположительно, вы хотите что-то вроде этого:

SELECT YEAR(c.EligibilityStartDate) as yyyy,
       MONTH(c.EligibilityStartDate) as mm,
       AVG(DATEDIFF(DAY, c.EligibilityStartDate, ce.EnrollmentStartDate) as date_diff         
FROM dbo.Client c JOIN
     dbo.ClientEnrollment ce
     ON c.ClientId = ce.ClientId AND c.CaseType = 99
GROUP BY YEAR(c.EligibilityStartDate), MONTH(c.EligibilityStartDate)
ORDER BY YEAR(c.EligibilityStartDate), MONTH(c.EligibilityStartDate);

Примечания:

  • Никогда не используйте запятые в предложении FROM.
  • Всегда используйте правильный, явный, стандартный JOIN синтаксис.
  • Используйте значимые псевдонимы таблиц (т.е. сокращения имен таблиц), а не бессмысленные.
  • Похоже, вы хотите запрос агрегации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...