首页 新闻 会员 周边 捐助

若有SQL语句学的较好的园友,欢迎前来看看,走过路过不要错过,本人想了好久都没有解决。

0
悬赏园豆:50 [已解决问题] 解决于 2015-06-27 23:29

要求:查出同一RootID的一组中回复时间为最新的记录

这是一个类似于“评论”的功能,现在需要查出所有主题的最新的一条评论。 

 

若能帮忙解决,感激不尽,若有需要本人帮忙的地方,有需要,本人在所不辞。

sql
SimpleCoder的主页 SimpleCoder | 初学一级 | 园豆:116
提问于:2015-06-26 23:55
< >
分享
最佳答案
1

标准的分组查询排序:

select * from (select *,rownum = row_number() over(partition by RootID,order by 回复时间 desc) from Table) as t
where t.rownum = 1;

大概是这样~
收获园豆:50
幻天芒 | 高人七级 |园豆:37205 | 2015-06-27 08:55

一楼的蛮好的啊,你怎么想出这么高级的语句来的?

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-06-27 10:10

@爱编程的大叔: 额~1楼的只能看出有限的字段嘛。要查具体的整条记录,就有点力不从心了。既然展示评论,应该是要把整条信息拿出来的。

幻天芒 | 园豆:37205 (高人七级) | 2015-06-27 11:23

@爱编程的大叔: 1楼是有问题的

angelshelter | 园豆:9914 (大侠五级) | 2015-06-27 21:50

@幻天芒: 你这写的太好了,完美的解决了我的问题,虽然我昨天晚上已经自己写好了,但是自己写的惨不忍睹,更不要说效率问题了,非常感谢你。

SimpleCoder | 园豆:116 (初学一级) | 2015-06-27 23:10

@SimpleCoder: 唉,搞这么复杂。

angelshelter | 园豆:9914 (大侠五级) | 2015-06-28 16:57
其他回答(4)
1

select rootid,max(reply_time) from t_name group by rootid

应该这样就行了,没验证过。

司幸 | 园豆:319 (菜鸟二级) | 2015-06-27 03:03

不行

支持(0) 反对(0) angelshelter | 园豆:9914 (大侠五级) | 2015-06-27 21:49

@angelshelter: 开始我也是这么做的,不行,结果和图上的一致。

支持(0) 反对(0) SimpleCoder | 园豆:116 (初学一级) | 2015-06-27 22:56
0

假设,只是假设一种可能性。

如果你的TaskID正好的和时间顺序一样的,而且正好有唯一性的话那么也可以这样写

select * from Table where taskid in (Select max(TaskID) from table group by rootid)

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-06-27 11:48

TaskId是主键自增的,确实是一致的。

支持(0) 反对(0) SimpleCoder | 园豆:116 (初学一级) | 2015-07-01 21:31
0

倒是有一种方法,就是不知道效率过不过得去

select * from (select * from table  ORDER BY 回复时间 desc) b group by b.TaskID

angelshelter | 园豆:9914 (大侠五级) | 2015-06-27 21:55

。。。,你这种才不行吧,group by 是这么用的吗

支持(0) 反对(0) 司幸 | 园豆:319 (菜鸟二级) | 2015-06-27 22:32

@司幸: 咋不行了,本人亲测的。

支持(0) 反对(0) angelshelter | 园豆:9914 (大侠五级) | 2015-06-28 09:31

@angelshelter: 我意思是你这种不使用聚合函数的group by 有意义吗,跟不使用group by的查询结果有区别吗?

跟下面这句的结果除了排序外 有区别吗

select * from table  ORDER BY 回复时间 desc,TaskID

支持(0) 反对(1) 司幸 | 园豆:319 (菜鸟二级) | 2015-06-28 16:52

@司幸: 你哪看到我没用group by了,当然和你的有区别的了,我用group by是把相同的TaskID去掉了,你那个sql没有去重TaskID的。

支持(0) 反对(0) angelshelter | 园豆:9914 (大侠五级) | 2015-06-28 16:56

我对group by 的理解有错误,你的写法我试了,可行。学到了,thanks

支持(0) 反对(0) 司幸 | 园豆:319 (菜鸟二级) | 2015-06-28 17:02

你这个我还没有试,待我明天试了,看看结果如何,你这个写法确实比较简洁。

支持(0) 反对(0) SimpleCoder | 园豆:116 (初学一级) | 2015-07-01 21:33

@SimpleCoder: 绝对行,本人亲测。

支持(0) 反对(0) angelshelter | 园豆:9914 (大侠五级) | 2015-07-01 23:04

@angelshelter:  你这个语法不是规范语法,mysql可以,oracle不行。

支持(0) 反对(0) 司幸 | 园豆:319 (菜鸟二级) | 2015-08-04 10:35

@司幸: 那我不太清楚了,好久没用oracle了。

支持(0) 反对(0) angelshelter | 园豆:9914 (大侠五级) | 2015-08-05 09:17
0

rank 和partition sqlserver2008才能支持

Rookier | 园豆:652 (小虾三级) | 2015-07-01 15:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册