Ich habe eine Frage bezüglich MSSQL-Anweisung. Also im Grunde das ist meine SQL-Abfrage:SQL-Abfrage Aggregatfunktion in WHERE-Klausel
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);
Was ich versuche, ist innerhalb der Unterabfrage zu tun, erhalte ich die Liste der durchschnittlichen Datum Gruppe von jedem Benutzer. Die Beispieldaten zurückgegeben werden (Benutzername, avg_date):
user1 10
user2 20
user3 20
Dann danach, aus der Abfrage außerhalb, ich brauche das Minimum des durchschnittlichen Datums von der Unterabfrage zurück finden. Jedoch, indem ich dies mache, bekomme ich und Fehlermeldung als von der Abfrage außerhalb, ich vergleiche nur 1 Spalte, wobei die Unterabfrage 2 Spalten zurückgibt.
Die Fehlermeldung ist 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
jedoch in meiner Unterabfrage muß ich die GROUP BY jeden Benutzer, so kann ich nicht einfach avg SELECT.
Irgendwelche Ideen, wie das zu beheben?
Vielen Dank im Voraus.
Was ist die Fehlermeldung? –
Die Fehlermeldung lautet Ein Aggregat wird möglicherweise nicht in der WHERE-Klausel angezeigt, es sei denn, es befindet sich in einer Unterabfrage, die in einer HAVING-Klausel oder einer Auswahlliste enthalten ist, und die aggregierte Spalte ist eine äußere Referenz. Was ich versuche zu tun, ist innerhalb der Unterabfrage, ich bekomme eine Liste der durchschnittlichen Tagesgruppe von jedem Benutzer. Dann erhalte ich in der äußeren Abfrage das Minimum aus dieser Liste. Irgendwelche Ideen, wie man das erreicht? – hyperfkcb
Ja ist es. Aber aus Gründen der Einfachheit habe ich es entfernt. Ich habe sogar den Spaltennamen umbenannt, als ob ich meinen ursprünglichen Tabellennamen verwenden würde, es wird sehr verwirrend sein – hyperfkcb