2012-03-29 30 views
1

我在mysql中有一个未规范化的表,我需要进行查询,以便它按某个字段进行分组并提供最近的一行。从mysql中的非规范化数据中选择最近的数据

例如表看起来像

callername | callerdate | incoming | status 

,我试图让所有的具有作为NotAnswered他们最近的状态记录,我想不出你会怎么做,我可以GROUP BY callername但是我不知道如何获得最新的值。

谢谢。

+0

你可以张贴一些示例数据和所需的O/P – Teja 2012-03-29 13:59:10

+0

是否callerdate表明最近?只是'ORDER BY callerdate' – Cfreak 2012-03-29 13:59:45

回答

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

非常感谢。 – 111111 2012-03-29 14:43:22

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

它是'callerdate'而不是'ID'。您需要将'MAX(ID)'别名为'ID'。您需要额外的连接谓词,例如'AND A.ID = B.ID'。您需要在外部查询中使用'status ='NotAnswered',而不是内部。 – MatBailie 2012-03-29 14:04:25

+0

但根据他的问题,他需要最近的状态为每个呼叫者姓名的“Notanswered”。 – Teja 2012-03-29 14:06:46

+0

我的第一个3分与此无关。我的最后一点是因为你包括所有的呼叫,不管他们的最后状态是什么。 (您正在显示最近的'NotAnswered'状态,而不是最近状态为'NotAnswered'的呼叫。) – MatBailie 2012-03-29 14:08:01