У меня возникли вопросы относительно инструкции MSSQL. Таким образом, в основном это мой SQL-запрос:Функция агрегирования SQL-запросов в выражении WHERE
SELECT table1.col1, avg(datediff(dd, table2.date, table3.date)) as avg_date
INNER JOIN table2
INNER JOIN table3
WHERE avg_date <= ALL
(SELECT table1.col1, avg(datediff(dd, table2.date, table3.date)) as avg_date
INNER JOIN table2
INNER JOIN table3
GROUP BY table1.col1);
То, что я пытаюсь сделать, это внутри подзапроса, я получаю список средней даты группы по каждому пользователю. Примерные данные возвращается (Username, avg_date):
user1 10
user2 20
user3 20
Тогда после этого, из запроса извне, мне нужно найти минимум средней даты возвращенной из вспомогательного запроса. Однако, делая это, я получаю сообщение об ошибке и как сообщение извне, я сравниваю только один столбец, в котором подзапрос возвращает 2 столбца.
Сообщение об ошибке An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference
Однако, в моем подзапроса мне нужно GROUP BY каждого пользователя, так что я не могу просто выбрать ср.
Любые идеи, как исправить это?
Заранее спасибо.
Что такое сообщение об ошибке? –
Сообщение об ошибке. Агрегат может не отображаться в предложении WHERE, если он не находится в подзапросе, содержащемся в предложении HAVING или списке выбора, а агрегированный столбец является внешней ссылкой. То, что я пытаюсь сделать, находится внутри подзапроса, я получаю список группы среднего дня каждым пользователем. Затем во внешнем запросе я получаю минимум из этого списка. Любые идеи, как достичь этого? – hyperfkcb
Да, это так. Но для простоты я удалил его. Я даже переименовал имя столбца, как если бы я использовал свое исходное имя таблицы, он будет очень запутанным. – hyperfkcb