Я пытаюсь узнать возраст посетителя из трех таблиц:
Посещения, которые содержат дату viist по идентификатору клиента, и
Клиенты, которые содержат идентификатор клиента, и
Клиника, в которой находится идентификатор клиники.
Вот мое заявление sql:
DECLARE @Clinicname nvarchar(50)
SET @Clinicname='First Clinic'
SELECT CASE
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 10 THEN '1-10'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 20 THEN '11-20'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 30 THEN '21-30'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 40 THEN '31-40'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 50 THEN '41-50'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 60 THEN '51-60'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 70 THEN '61-70'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 80 THEN '71-80'
ELSE '81+'
END AS age,
COUNT(*) AS n
FROM Visit v
INNER JOIN Client c ON v.ClientID = c.ClientID
INNER JOIN Clinic r ON v.ClinicId = r.ClinicId
WHERE r.Name IN (@Clinicname)
GROUP BY CASE
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 10 THEN '1-10'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 20 THEN '11-20'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 30 THEN '21-30'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 40 THEN '31-40'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 50 THEN '41-50'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 60 THEN '51-60'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 70 THEN '61-70'
WHEN DATEDIFF(YEAR, c.BirthDate, MIN(v.Date)) <= 80 THEN '71-80'
ELSE '81+'
END
Вот ошибка:
Невозможно использовать агрегат или подзапрос в выражении, используемом для группы по списку предложения GROUP BY.
Когда я заменяю MIN (v.Date) на GETDATE (), это работает.