2012-07-09 68 views
1
table(ms_replies) 
|------------------------------------------| 
| id | ticketID | replyStamp    | 
|------------------------------------------| 
| 1 | 7  | Tue 11 Oct 2011, 8:56am | 
| 2 | 7  | Wed 12 Oct 2011, 9:20am | 
| 3 | 8  | Wed 12 Oct 2011, 16:24pm | 
| 4 | 7  | Thu 27 Oct 2011, 20:28pm | 
| 5 | 8  | Tue 18 Oct 2011, 9:54am | 
|------------------------------------------| 

我迄今该代码的最新记录是:检索使用组

SELECT 
    ticketID, 
    MAX(replace(replace(replyStamp, 'pm',''), 'am','')) AS time 
FROM 
    ms_replies 
WHERE 
    `ticketID` IN ($IDs) 
GROUP BY 
    ticketID 

但这并不返回最近的条目。

请注意查询中的replace需要删除am |下午,这不是我做的事,但我不能把它变坏,不幸的是。

回答

0

你有你的字符串转换成日期,如果要比较他们的日期:

SELECT ticketID, 
     MAX(STR_TO_DATE(
      REPLACE(REPLACE(replyStamp, 'am', ''), 'pm', ''), 
      '%a %d %b %Y, %T')) AS max_time 
    FROM ms_replies 
    WHERE ticketID IN (7, 8) 
GROUP BY ticketID; 

但是,如果最新的条目总是有最大的ID(如您的样品中)实际上不是必需的;那么你可以只检查MAX(id),而不是像@ZaneBien的答案 - 或者这里:

SELECT m.ticketID, m.replyStamp 
    FROM ms_replies AS m 
WHERE m.id = (
     SELECT MAX(id) FROM ms_replies 
     WHERE ticketID = m.ticketID 
     ); 
0

我认为,集团将采取的第一个纪录,当它降低下来的ticketID(因为你已经发现了),试图通过ticketID DESC

0

使用命令他们这样的解决方案:

SELECT a.ticketID, a.replyStamp 
FROM ms_replies a 
INNER JOIN 
(
    SELECT MAX(id) AS maxid 
    FROM ms_replies 
    WHERE ticketID IN ($IDs) 
    GROUP BY ticketID 
) b ON a.ticketID = b.maxid 

顺便说一句,您应该确实将replyStamp列设为TIMESTAMPDATETIME而不是字符串。这样,您可以对其进行各种日期/时间计算。