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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top