使用2个相同结果SQL检索最后一条记录

时间:2012-06-01 13:34:08

标签: sql get record

我有一点问题......我需要为此检索最后的记录:

  

id:0
用户名:Admin
type:logic
id_quest:1
risp:X   

id:1
用户名:管理员类型:逻辑
id_quest:1
risp:X   

id:2
用户名:管理员类型:逻辑
id_quest:1
risp:Y   

id:3
用户名:Lol
类型:逻辑
id_quest:2
risp:Z   

id:4
用户名:Lol
类型:biology
id_quest:1
risp:K   

id:5
用户名:Lol
类型:生物
id_quest:1
risp:Q   

我想在“type和id_quest相同”时检索最后一条记录,所以在这种情况下它应该给出:id:5,id:3和id:2。

这是我的db:

CREATE TABLE IF NOT EXISTS `question` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `type` varchar(50) NOT NULL,
  `id_quest` int(255) DEFAULT NULL,
  `risp` int(1) DEFAULT NULL,
  `non_contata` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=127 ;

INSERT INTO `question` (`id`, `username`, `type`, `id_quest`, `risp`, `non_contata`) VALUES
(91, 'Admin', 'biologia', 1, X, 0),
(92, 'Admin', 'biologia', 2, X, 0),
(93, 'Admin', 'logica', 3, X, 0),
(94, 'Admin', 'logica', 4, X, 0),
(73, 'J.J.J', 'biologia', 1, X, 0),
(74, 'J.J.J', 'biologia', 2, X, 0),
(75, 'J.J.J', 'biologia', 3, X, 0),
(76, 'J.J.J', 'biologia', 4, X, 0),
(109, 'Admin', 'biologia', 1, X, 0),
(110, 'Admin', 'biologia', 2, X, 0),
(111, 'Admin', 'biologia', 3, X, 0),
(112, 'Admin', 'biologia', 4, X, 0),

我希望该查询返回此ID:112,111,110,109,76,75,74,73,94,93

3 个答案:

答案 0 :(得分:2)

根据最后一条记录,您可能意味着ID最大的那个。

以下内容应该这样做:

select *
from t
where t.id in (select max(id)
               from t
               group by type, id_quest
               having count(*) > 1
              )

答案 1 :(得分:1)

基本上,它应该使用分组:

SELECT MAX(id)
FROM table
GROUP BY type, id_quest
ORDER BY 1 DESC

假设通过“最后一条记录”表示最大的id,并且表中重复条目的位置无关紧要。

在MySQL上,此查询返回:

mysql> SELECT max(ID) FROM test GROUP BY type, id_quest ORDER BY 1 DESC;
+---------+
| max(ID) |
+---------+
|       5 |
|       3 |
|       2 |
+---------+
3 rows in set (0.00 sec)

如果你只想比较直接的前辈,那么事情会变得复杂一些,你需要使用子查询。

SELECT id
FROM question q1
WHERE
IFNULL((SELECT q2.type=q1.type FROM question q2 WHERE q2.id > q1.id ORDER BY q2.id LIMIT 1),0) = 0
OR
IFNULL((SELECT q3.id_quest=q1.id_quest FROM question q3 WHERE q3.id > q1.id ORDER BY q3.id LIMIT 1),0) = 0
ORDER BY id DESC;

此查询将id_quest和type列与具有下一个最高id的列进行比较,如果相同则输出1,否则输出0。

但是,在大型表上,这可能效率非常低,编写一个顺序遍历每一行并过滤掉重复项的脚本会更好。

答案 2 :(得分:0)

试试这个(如果id是唯一或主键):

Select * from tableName where id in (Select Max(id) from tableName Group By type, id_quest)