要求:查出同一RootID的一组中回复时间为最新的记录
这是一个类似于“评论”的功能,现在需要查出所有主题的最新的一条评论。
若能帮忙解决,感激不尽,若有需要本人帮忙的地方,有需要,本人在所不辞。
标准的分组查询排序:
select * from (select *,rownum = row_number() over(partition by RootID,order by 回复时间 desc) from Table) as t where t.rownum = 1; 大概是这样~
一楼的蛮好的啊,你怎么想出这么高级的语句来的?
@爱编程的大叔: 额~1楼的只能看出有限的字段嘛。要查具体的整条记录,就有点力不从心了。既然展示评论,应该是要把整条信息拿出来的。
@爱编程的大叔: 1楼是有问题的
@幻天芒: 你这写的太好了,完美的解决了我的问题,虽然我昨天晚上已经自己写好了,但是自己写的惨不忍睹,更不要说效率问题了,非常感谢你。
@SimpleCoder: 唉,搞这么复杂。
select rootid,max(reply_time) from t_name group by rootid
应该这样就行了,没验证过。
不行
@angelshelter: 开始我也是这么做的,不行,结果和图上的一致。
假设,只是假设一种可能性。
如果你的TaskID正好的和时间顺序一样的,而且正好有唯一性的话那么也可以这样写
select * from Table where taskid in (Select max(TaskID) from table group by rootid)
TaskId是主键自增的,确实是一致的。
倒是有一种方法,就是不知道效率过不过得去
select * from (select * from table ORDER BY 回复时间 desc) b group by b.TaskID
。。。,你这种才不行吧,group by 是这么用的吗
@司幸: 咋不行了,本人亲测的。
@angelshelter: 我意思是你这种不使用聚合函数的group by 有意义吗,跟不使用group by的查询结果有区别吗?
跟下面这句的结果除了排序外 有区别吗
select * from table ORDER BY 回复时间 desc,TaskID
@司幸: 你哪看到我没用group by了,当然和你的有区别的了,我用group by是把相同的TaskID去掉了,你那个sql没有去重TaskID的。
我对group by 的理解有错误,你的写法我试了,可行。学到了,thanks
你这个我还没有试,待我明天试了,看看结果如何,你这个写法确实比较简洁。
@SimpleCoder: 绝对行,本人亲测。
@angelshelter: 你这个语法不是规范语法,mysql可以,oracle不行。
@司幸: 那我不太清楚了,好久没用oracle了。
rank 和partition sqlserver2008才能支持