déclaration Ceci est mon instruction SQL qui fonctionne à l'aide datediff:Utiliser datediff dans MySQL
SELECT SUM(b134_nettpay) AS Total, b134_rmcid, b134_recdate
FROM B134HREC
WHERE datediff (dd, '2006-05-05', getdate()) > 90
GROUP BY b134_rmcid, b134_recdate
ORDER BY b134_recdate DESC, b134_rmcid
Je dois remplacer la date Hardcoded '2006-05-05' avec MAX (b134_recdate) comme ceci:
SELECT SUM(b134_nettpay) AS Total, b134_rmcid, b134_recdate
FROM B134HREC
where datediff (dd, MAX(b134_recdate), getdate()) > 90
GROUP BY b134_rmcid, b134_recdate
ORDER BY b134_recdate DESC, b134_rmcid
Mais je reçois ce message d'erreur:
un agrégat peut ne pas apparaître dans la clause WHERE à moins qu'il soit dans une sous-requête contenue dans un CLAUS e ou une liste de sélection, et la colonne en cours d'agrégation est une référence externe.
Une idée de comment réparer mon instruction SQL?
Cela répond à la "ou une liste de sélection" comme suggéré par le message d'erreur –
En l'état la requête ne peut tirer parti d'aucun index qui pourrait être sur b134_recdate (sauf pour le max). Si c'était "où B134_rec_date> DateAdd (dd, getDate(), 90)" il utiliserait un index, s'il existait. NB: Je ne sais pas si la syntaxe de dateadd est correcte, mais vous avez l'idée. –