如何从每个配置文件中提取最后一条评论?

时间:2012-04-26 08:17:56

标签: sql greatest-n-per-group

我需要为最后100个个人资料提取每个个人资料的最后评论

如果type == 1,每个配置文件至少有一条评论

  • type == 1 =>是公司
  • type == 2 =>是人类

以下是相关表格和数据:

CREATE TABLE IF NOT EXISTS `comment` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `profile` int(11) NOT NULL,
  `name` varchar(200) NOT NULL,
  `email` varchar(200) NOT NULL,
  `county` int(11) NOT NULL,
  `comment` text NOT NULL,
  `created` int(11) NOT NULL,
  `status` int(11) NOT NULL,
  `verified` int(11) NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `comment` (`id`, `profile`, `name`, `email`, `county`, `comment`, `created`, `status`, `verified`) VALUES
(1, 1, 'ANGAJAT 1', 'email 2', 1, 'comm 1', 1335423985, 0, 0),
(2, 3, 'ANGAJAT 2', 'email 4', 1, 'comm 2', 1335424011, 0, 0),
(3, 5, 'ANGAJAT 3', 'email 6', 1, 'comm 3', 1335424037, 0, 0),
(4, 5, 'ANGAJAT 3', 'email 6', 1, 'comm 4', 1335424039, 0, 0);

CREATE TABLE IF NOT EXISTS `profile` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `type` int(11) NOT NULL COMMENT '1 = angajatori ; 2 - angajati',
  `name` varchar(200) NOT NULL,
  `county` int(11) NOT NULL,
  `email` varchar(200) NOT NULL,
  `created` int(11) NOT NULL,
  `comments` int(11) NOT NULL,
  `status` int(11) NOT NULL,
  `verified` int(11) NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

INSERT INTO `profile` (`id`, `type`, `name`, `county`, `email`, `created`, `comments`, `status`, `verified`) VALUES
(1, 1, 'ANGAJATOR 1', 1, 'email 1', 1335423985, 0, 0, 0),
(2, 2, 'ANGAJAT 1', 1, 'email 2', 1335423985, 0, 0, 0),
(3, 1, 'ANGAJATOR 2', 1, 'email 3', 1335424011, 0, 0, 0),
(4, 2, 'ANGAJAT 2', 1, 'email 4', 1335424011, 0, 0, 0),
(5, 1, 'ANGAJATOR 3', 1, 'email 5', 1335424037, 0, 0, 0),
(6, 2, 'ANGAJAT 3', 1, 'email 6', 1335424037, 0, 0, 0);\

我试过了:

SELECT * 
FROM COMMENT c
JOIN profile p ON p.id = c.profile
GROUP BY c.profile
ORDER BY c.created DESC , p.id ASC 
LIMIT 100

我得到了:

id  profile name    email   county  comment created status  verified    id  type    name    county  email   created comments    status  verified
3   5   ANGAJAT 3   email 6 1   comm 3  1335424037  0   0   5   1   ANGAJATOR 3 1   email 5 1335424037  0   0   0
2   3   ANGAJAT 2   email 4 1   comm 2  1335424011  0   0   3   1   ANGAJATOR 2 1   email 3 1335424011  0   0   0
1   1   ANGAJAT 1   email 2 1   comm 1  1335423985  0   0   1   1   ANGAJATOR 1 1   email 1 1335423985  0   0   0

查询返回每100家公司的第一条评论

请查询

1 个答案:

答案 0 :(得分:1)

试试这个:

SELECT c.* 
FROM COMMENT c
JOIN 
  (SELECT MAX(created_at) created_at, profile FROM COMMENT
   GROUP BY profile) p ON p.profile = c.profile AND p.created_at = c.created_at
ORDER BY c.created DESC , p.profile ASC 
LIMIT 100

应该这样做。