MySQL Help: SELECT table2.id WHERE ... table1.date ist der größte
Frage
Ich habe 2 Tabellen, indem eine innere Verknüpfung sie abzufragen.
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 auf Berichte zwischen zwei Terminen. Tabelle 1 enthält Informationen über die Berichte (Datum, groupid usw.), table2 hält die Einträge zu den Berichten.
Ich möchte eine Abfrage machen fast genau die gleiche, außer es nur die IDs aus dem Bericht mit dem neuesten Datum auswählt, zwischen diesen zwei Terminen.
Kann mir jemand helfen? Ich kann nicht ganz bekommen, meinen Kopf um MAX (Datum) Abfragen geben -. Alles, was ich zurück bekommen, ist eine Zählung jeder ID und auch der max Datum, und nicht nur jene ids vom max Datum
Danke,
Ich habe vielleicht eine verschachtelte SQL-Abfrage gedacht - können Sie das tun? Ich kann Referenzen auf Google finden, aber es kann nicht an der Arbeit ... Etwas ähnliches wie:
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 bekommen, dass, obwohl zu arbeiten, und wenn ich versuche, es in phpMyAdmin zu testen, es schlägt mich mit einem Fehler aus mir meine Benutzern nicht zu sagen SELECT-Berechtigungen hat. Seltsam, da dies ein Test-Server ich in als root angemeldet bin.
Lösung
Ohne weitere Informationen über die Struktur der Tabellen, würde ich vorschlagen, dass Sie so etwas wie dies versuchen:
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)
Ich habe nicht getestet, aber es sollte eine Richtung zeigen 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 einer Verknüpfung zu einer 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
Andere Tipps
...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10
werden Sie 10 erste Zeilen mit den Daten erhalten