2012-03-29 14 views
1

Ich habe eine Tabelle in MySQL, die nicht normalisiert ist und ich muss abfragen, so dass es nach einem bestimmten Feld gruppiert und gibt die neueste Zeile.wählen Sie letzte aus nicht normalisierten Daten in Mysql

Zum Beispiel sieht die Tabelle wie

callername | callerdate | incoming | status 

Und ich versuche alle Datensätze zu erhalten, die ihren letzten Status als NotAnswered haben und ich kann nicht herausfinden, wie Sie dies tun würde, kann ich GROUP BY Anrufername aber ich kann nicht herausfinden, wie Sie die neuesten Werte erhalten.

Danke.

+0

Können Sie einige Beispieldaten erstellen und die gewünschte o/p – Teja

+0

Hat callerdate zeigen jüngste? Nur 'ORDER BY callerdate' – Cfreak

Antwort

1
SELECT 
    yourTable.* 
FROM 
    yourTable 
INNER JOIN 
(
    SELECT 
    callername, 
    MAX(callerdate) AS callerdate 
    FROM 
    yourTable 
    GROUP BY 
    calledname 
) 
    AS mostRecent 
    ON mostRecent.callername = yourTable.callername 
    AND mostRecent.callerdate = yourTable.callerdate 
WHERE 
    yourTable.status='NotAnswered' 
+0

Danke, das hat super funktioniert. – 111111

2
SELECT A.* FROM 
YOURTABLE A, 
( 
SELECT callername,callerdate,MAX(ID) AS ID 
FROM YOURTABLE 
WHERE status='NotAnswered' 
GROUP BY callername,callerdate 
) B 
WHERE A.ID=B.ID; 
+0

Es ist' callerdate' anstatt 'ID'. Sie müssen 'MAX (ID)' mit einem Alias ​​wie 'als ID' versehen. Sie benötigen ein zusätzliches Join-Prädikat wie 'AND A.ID = B.ID'. Sie brauchen in der äußeren Abfrage den Status "notAnswered", nicht den inneren. – MatBailie

+0

Aber für seine Frage benötigt er den letzten Status als 'Notanswered' für jeden Callername. – Teja

+0

Meine ersten 3 Punkte haben damit nichts zu tun. Und mein letzter Punkt ist, weil Sie alle Anrufe einschließen, egal was ihr letzter Zustand ist. (Sie zeigen den letzten Zustand "NotAnswered" an, nicht die Anrufe, bei denen der letzte Zustand "NotAnswered" ist.) – MatBailie