2009-04-19 7 views
0

Ich habe 2 Tabellen, mit einem inneren Join, um sie abzufragen.MySQL Hilfe: SELECT table2.id WHERE ... table1.date ist am größten

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

Es zählt die IDs der Einträge in Berichten zwischen 2 Daten. Tabelle 1 enthält Informationen zu den Berichten (Datum, Gruppennummer usw.), Tabelle 2 enthält die Einträge zu den Berichten.

Ich möchte eine Abfrage fast genau die gleiche machen, außer es wählt nur die IDs aus dem Bericht mit dem spätesten Datum, zwischen diesen 2 Daten.

Kann jemand helfen? Ich kann MAX-Abfragen (Datum) einfach nicht verstehen - alles, was ich zurückbekomme, ist eine Zählung jeder ID und auch des maximalen Datums, und nicht nur die IDs vom maximalen Datum.

Danke,


Ich habe vielleicht eine verschachtelte SQL-Abfrage zu denken - können Sie das tun? Ich kann Referenzen auf Google finden, aber es kann nicht an der Arbeit ... Etwas Ähnliches:

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

Kann nicht, dass, obwohl an der Arbeit, und wenn ich versuche, es in phpMyAdmin zu testen, es schlägt Ich habe einen Fehler mit der Fehlermeldung, dass mein Benutzer keine SELECT-Rechte hat. Seltsam, da dies ein Testserver ist, bei dem ich als root angemeldet bin.

+1

Können Sie die Struktur der beiden Tabellen geben und genau, welche Informationen Sie möchten von beiden Tabellen abrufen? Dies wird die Bereitstellung eines gültigen Beispielcodes erheblich vereinfachen. –

Antwort

0

Ohne weitere Informationen über die Struktur der Tabellen, würde ich, dass Sie so etwas wie dies versuchen vorschlagen:

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) 

I haven‘ t testete dies, aber es sollte in eine Richtung zeigen, dass Sie mit diesem Problem gehen könnten. Ihr anderer Vorschlag eine Unterabfrage zu verwenden, ist gültig und könnte wie folgt funktionieren:

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

Oder in einem Join in eine temporären Tabelle:

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

Danke. Ich habe die geschachtelte Auswahlfunktion - die tatsächliche Abfrage ist deutlich länger als das Beispiel, das ich gepostet habe, und ich hatte einen Tippfehler. – Dan

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

erhalten Sie 10 ersten Reihen mit den Daten erhalten

+0

Nicht genau, was ich gesucht habe - ich muss das späteste Datum bekommen und alle Ids mit diesem Datum auswählen. – Dan

+0

Das ist keine Antwort, sondern ein Kommentar. Außerdem ist es MySql-Syntax. – soulmerge