您好, 我需要一些SQL帮助。附上我的桌子的形象。
如果您看到rootmessageid列,则有4条99条记录。所有这4个进行了一次完整的对话。
同样,119的两个记录进行了另一次对话。
116,117,118是单个消息对话。
现在我需要获取msgfrom = 7或msgto = 7的所有记录(这很容易)
现在复杂的一点。我想要每个对话中唯一的最新记录(基于datetimecreated)。
按照脚本创建此表。
CREATE TABLE IF NOT EXISTS `selectioncommunication` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`comactionid` int(11) NOT NULL,
`usercomment` varchar(2048) DEFAULT NULL,
`msgfrom` int(11) NOT NULL,
`msgto` int(11) NOT NULL,
`projectid` int(11) NOT NULL,
`parentmessageid` int(11) NOT NULL,
`datetimecreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`rootmessageid` int(11) NOT NULL,
`isread` tinyint(1) NOT NULL DEFAULT '0',
`isclosed` tinyint(1) DEFAULT '0',
`relative_date_time` datetime DEFAULT NULL,
`consultant_response` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=121 );
答案 0 :(得分:0)
使用ORDER BY datetime ASC / DESC
这将按顺序对结果进行排序,然后将LIMIT 1添加到查询结尾,以便只获取列表中的第一条记录。
答案 1 :(得分:0)
SELECT s.*
FROM selectioncommunication s NATURAL JOIN (
SELECT parentmessageid, MAX(datetimecreated) datetimecreated
FROM selectioncommunication
WHERE msgfrom = 7 OR msgto = 7
GROUP BY parentmessageid
) t
WHERE s.msgfrom = 7 OR s.msgto = 7
答案 2 :(得分:0)
以下是SQl Fiddle没有Join
SELECT *
FROM selectioncommunication k
WHERE datetimecreated = (SELECT
MAX(datetimecreated)
FROM selectioncommunication s
WHERE s.rootmessageid = k.rootmessageid
GROUP BY s.rootmessageid
ORDER BY s.id)