Question

J'ai 2 tables, en utilisant une jointure interne pour les interroger.

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ?

Il compte les IDs des entrées sur les rapports entre les 2 dates. Le tableau 1 contient les informations sur les rapports (date, groupId etc.), table2 détient les entrées sur les rapports.

Je voudrais faire une requête presque exactement la même chose, sauf qu'il ne sélectionne que les ids du rapport avec la dernière date entre ces 2 dates.

Quelqu'un peut-il aider? Je ne peux pas tout à fait obtenir ma tête autour MAX (date) type de requêtes -. Tout ce que je reviens est un compte de tous les id et aussi la date maximum, plutôt que seulement les ids de la date max

Merci,


J'ai pensé peut-être une requête SQL imbriqué - pouvez-vous faire? Je peux trouver des références sur Google, mais ne peut pas le faire fonctionner ... Quelque chose de similaire à:

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ? AND 
(
    SELECT MAX(date) 
    FROM table1 
    WHERE date > ? AND date < ?
)

Impossible d'obtenir que de travailler bien, et lorsque je tente de le tester dans phpMyAdmin, il me donne le coup avec une erreur me disant mon utilisateur n'a pas le privilège SELECT. Étrange, puisque c'est un serveur de test, je suis connecté en tant que root.

Était-ce utile?

La solution

Sans plus d'informations en ce qui concerne la structure des tables, je suggère que vous essayez quelque chose comme ceci:

SELECT t2.id
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.relation_id
WHERE t1.date BETWEEN ? AND ?
HAVING MAX(t1.date)

Je n'ai pas testé, mais il devrait pointer dans une direction que vous pouvez aller avec ce problème. Votre autre suggestion d'utiliser un sous-requête est valide et pourrait fonctionner quelque chose comme ceci:

SELECT *
FROM table2 t2 
WHERE t2.parent_id IN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
)

Ou dans une jointure à une table temporaire:

SELECT *
FROM table2 t2
INNER JOIN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
) AS t1 ON t2.relation_id = t1.relation_id

Autres conseils

 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

vous obtiendrez 10 premières lignes avec les dates

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top