0

在此处输入图像描述

嗨,我需要一些关于 SQL 的帮助。附上我的桌子的图像。

如果您看到 rootmessageid 列,则有 4 条 99 记录。所有这些 4 构成了一个完整的对话。

类似地,119 的 2 条记录进行了另一个对话。

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 );
4

3 回答 3

0

使用 ORDER BY 日期时间 ASC/DESC

这将按顺序对您的结果进行排序,然后将 LIMIT 1 添加到查询的末尾,以仅获取列表中的第一条记录。

于 2013-05-17T10:55:23.880 回答
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
于 2013-05-17T11:07:03.883 回答
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)
于 2013-05-17T12:24:43.603 回答