一个查询有关问题.这次应该简单点了.

一个查询问题..这次应该简单点了..

create table reply(

id int not null primary key auto_increment

reply_id int not null

name varchar(10) not null default ”

content mediumtext not null

time int unsigned not null

);

insert into reply(id,reply_id,name,content,time) values(‘1′,’1′,’test1′,’test1′,’1’);

insert into reply(id,reply_id,name,content,time) values(‘2′,’1′,’test2′,’test2′,’3’);

insert into reply(id,reply_id,name,content,time) values(‘3′,’2′,’test3′,’test3′,’2’);

insert into reply(id,reply_id,name,content,time) values(‘4′,’2′,’test4′,’test4′,’4’);

insert into reply(id,reply_id,name,content,time) values(‘5′,’3′,’test5′,’test5′,’1’);

insert into reply(id,reply_id,name,content,time) values(‘6′,’3′,’test6′,’test6′,’2’);

insert into reply(id,reply_id,name,content,time) values(‘7′,’3′,’test7′,’test7′,’5’);

要达到的目的:

按reply_id来进行划分,取相同reply_id值的所有记录中time值最大的一条记录,然后再把所有取出的值按time值降序排列

预期结果:

按此要求则首先取出了3条记录(因为只有3个不同的reply_id值):

id reply_id name content time

2 1 test2 test2 3

4 2 test4 test4 4

7 3 test7 test7 5

然后.再在此基础上.按time值大小进行排序.于是得到的最后的查询结果:

id reply_id name content time

7 3 test7 test7 5

4 2 test4 test4 4

2 1 test2 test2 3

这样的查询语句如何写?


SQL code

SELECT * FROM
(SELECT `id`, `reply_id`, `name`, `content`, `time` FROM `reply` ORDER BY `time` DESC) tbl
GROUP BY `reply_id`
ORDER BY `time` DESC


其中的一种解法如下。
SQL code
mysql> select * from reply;
+----+----------+-------+---------+------+
| id | reply_id | name  | content | time |
+----+----------+-------+---------+------+
|  1 |        1 | test1 | test1   |    1 |
|  2 |        1 | test2 | test2   |    3 |
|  3 |        2 | test3 | test3   |    2 |
|  4 |        2 | test4 | test4   |    4 |
|  5 |        3 | test5 | test5   |    1 |
|  6 |        3 | test6 | test6   |    2 |
|  7 |        3 | test7 | test7   |    5 |
+----+----------+-------+---------+------+
7 rows in set (0.00 sec)

mysql> select * from reply r
    -> where not exists (select 1 from reply where reply_id=r.reply_id and time>r.time)
    -> order by time desc;
+----+----------+-------+---------+------+
| id | reply_id | name  | content | time |
+----+----------+-------+---------+------+
|  7 |        3 | test7 | test7   |    5 |
|  4 |        2 | test4 | test4   |    4 |
|  2 |        1 | test2 | test2   |    3 |
+----+----------+-------+---------+------+
3 rows in set (0.00 sec)

mysql>


                        
    
    
                    
一个查询有关问题.这次应该简单点了.

相关文章:

你感兴趣的文章:

标签云: