2009-04-19 7 views
0

J'ai 2 tables, en utilisant une jointure interne pour les interroger.Aide MySQL: SELECT table2.id O WH ... table1.date est la plus grande

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

Il compte les identifiants des entrées sur les rapports entre deux dates. Le tableau 1 contient des informations sur les rapports (date, groupid etc.), table2 contient les entrées sur les rapports.

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

Quelqu'un peut-il aider? Je n'arrive pas à comprendre les requêtes de type MAX (date) - tout ce que je récupère est le nombre de chaque identifiant et aussi la date maximale, 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 semblable à:

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 < ? 
) 

ne peut pas obtenir que pour travailler bien, et lorsque je tente de le tester dans phpMyAdmin, il donne le coup moi avec une erreur me disant que mon utilisateur n'a pas les privilèges SELECT. Étrange, puisqu'il s'agit d'un serveur de test auquel je suis connecté en tant que root.

+1

Pouvez-vous fournir la structure des deux tables et exactement quelles informations vous voulez récupérer des deux tables? Cela rendra beaucoup plus simple de fournir un exemple de code valide. –

Répondre

0

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) 

refuge I » t testé cela, mais il devrait pointer dans une direction que vous pourriez 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 
+0

Merci. J'ai obtenu le travail de sélection imbriqué - la requête réelle est significativement plus longue que l'exemple que j'ai posté, et j'ai eu une faute de frappe. – Dan

-1
...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

+0

Pas exactement ce que je cherchais - J'ai besoin d'obtenir la dernière date et sélectionner tous les identifiants avec cette date. – Dan

+0

Ce n'est pas une réponse, mais un commentaire. D'ailleurs, c'est la syntaxe MySql. – soulmerge

Questions connexes