2012-07-09 62 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而不是字符串。這樣,您可以對其進行各種日期/時間計算。