2010-01-04 6 views
1

Je suis sûr que cette question est évidente, mais j'ai joué avec un ensemble de sous-requêtes de plus en plus complexe pour la dernière heure et n'aboutissant à rien.SELECT id_field OERE max (date_field) <'date'

J'ai besoin de sélectionner un groupe d'ID à partir d'une table où la dernière date de cet enregistrement est antérieure à une date donnée. J'essayais:

SELECT id_field WHERE max(date_field) < 'some date' 

Mais obtenir 'ne peut pas avoir agrégé dans où champ'. J'ai considéré que je pouvais sélectionner où il n'y a pas de dates au-dessus d'une certaine date, mais à ce stade, mon cerveau agite son petit drapeau blanc.

Merci.

Répondre

2
SELECT id_field 
    FROM tbl 
GROUP BY id_field 
HAVING max(date_field) < 'some date' 
4
SELECT id_field 
    , max(date_field) 
    FROM tbl 
GROUP BY id_field 
HAVING max(date_field) < 'some date' 
+0

Vous n'avez pas besoin de renvoyer max (date_field) pour l'utiliser dans la clause HAVING. C'est fondamentalement correct (bien que la plupart des systèmes se plaignent que vous n'avez pas nommé le second champ), mais ne frappe pas tout à fait la marque en fonction de ce que l'OP veut. –

0

Utilisez HAVING au lieu de WHERE. HAVING est comme un où pour les valeurs groupées.