Requête SQL: Chaque GROUPE PAR l'expression doit contenir au moins une colonne qui n'est pas une référence externe
Obtenir cette erreur:
Chaque GROUPE PAR l'expression doit contenir au moins une colonne qui n'est pas une référence externe.
RowId ErrorDatetime ErrorNum ErrorMessage
824 2010-09-24 08:01:42.000 9001 Account 55 not found
823 2010-09-24 08:00:56.000 9001 Account 22222222222 not found
822 2010-09-24 05:06:27.000 9001 Account 55 not found
821 2010-09-24 05:05:42.000 9001 Account 22222222222 not found
Je vais essayer d'obtenir les errormessage, et la première fois qu'elle s'est produite pour la journée en cours, et c'est de travailler parce que je ne "Groupe par ErrorMessage".
Cependant, si je veux trouver le premier de chaque jour:
SELECT Min(ErrorDateTime) as 'ErrorDateTime', Min(ErrorMessage) as 'ErrorMessage'
FROM CommonError
WHERE dbo.StripTimeFromDate(ErrorDateTime) = dbo.StripTimeFromDate(getdate())
and ErrorNumber = '9001'
GROUP BY dbo.StripTimeFromDate(getdate()), ErrorMessage
La pratique-dandy de la fonction (à partir de http://bloggingabout.net/blogs/jschreuder/archive/2007/03/13/useful-t-sql-date-functions.aspx):
ALTER FUNCTION [dbo].[StripTimeFromDate] (@inputDate DATETIME)
RETURNS DATETIME
BEGIN
RETURN DATEADD(d, DATEDIFF(d, 0, @inputDate), 0)
END
- Quelle version de SQL Server que vous utilisez?
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous n'avez pas besoin de le MIN(ErrorMessage) dans votre SÉLECTION. SÉLECTIONNEZ simplement ErrorMessage. Deuxièmement, GROUPE PAR ErrorMessage seulement.
Utilisation:
Vérifier les références, dans le GROUPE; il n'était pas de se faire prendre parce que MIN a été appliqué à la même colonne.
En supposant que SQL Server 2005+, c'est plus facile à manipuler avec google analytics:
J'avais getdate() au lieu de ErrorDate dans le "group by".
Je pense que j'ai vu des problèmes similaires dans d'autres forums où les gens avaient un littéral dans le "group by".
Correction est: