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 :(得分:0)
我认为group会在第一条记录中删除它们,因为它已经被ticketID(你发现了)尝试通过ticketID DESC命令它们
答案 1 :(得分: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
列设为TIMESTAMP
或DATETIME
类型而不是字符串。这样,您就可以对其进行各种日期/时间计算。
答案 2 :(得分: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
);