请教一条SQL语句
表结构如下name modeDate;
现在需要查找name为‘A’,‘B',‘C'的各自最新的5条记录。
问题点数:50、回复次数:12Top
1 楼judyhui7612()回复于 2005-01-04 13:50:04 得分 20
select name,modedate from (select name,modedate from table
where (name='a')
order by modedate desc)
where rownum<6
union
select name,modedate from (select name,modedate from table
where (name='b')
order by modedate desc)
where rownum<6
union
select name,modedate from (select name,modedate from table
where (name='c')
order by modedate desc)
where rownum<6
期待更好的方法Top
2 楼zrb007(老兵)回复于 2005-01-04 15:08:10 得分 10
刚学到的处理这种问题的最好办法:
select a.学生name,a.课程name,a.成绩 from
(select 学生name,课程name,成绩,row_number()
over(partition by 课程name order by 成绩 desc) top3 from 你的表) a
where a.top3 <= 3
楼主的问题照改就是了!
Top
3 楼judyhui7612()回复于 2005-01-04 16:07:03 得分 10
zrb007(彬彬) 挺好的
Top
4 楼GerryYang(轻尘)回复于 2005-01-04 17:06:08 得分 10
表结构如下name modeDate;
现在需要查找name为‘A’,‘B',‘C'的各自最新的5条记录。
select a.* from
(select a.*,row_number(partition by name,order by modedate) rn from a) a
where a.name in ('A','B','C') and a.rn<=5;
没有测试过,自己调试一下.Top
5 楼liuyi8903(不让疑问伴随)回复于 2005-01-04 17:10:22 得分 0
Select *
From (Select Tablename.*,
Row_Number() Over(Partition By Name Order By Modedate) Rk
From Tablename)
Where Rk <= 5Top
6 楼soniczck(城市农作物)回复于 2005-01-08 19:02:39 得分 0
SELECT *
FROM (SELECT a.*,
Row_Number() Over(PARTITION BY a.NAME ORDER BY a.Modedate) Rn
FROM Tablename a)
WHERE Rn <= 5
AND NAME IN ('A', 'B', 'C')Top
7 楼soniczck(城市农作物)回复于 2005-01-08 19:10:22 得分 0
分析函数语法:
FUNCTION_NAME(<argument>,<argument>..)
OVER
(<Partition-clause>,<Order-by-Clause><Windowing Clause>)
注:
argument有0~3个参数,可以是表达式
OVER 区分是聚集函数还是分析函数
Partition-clause 可选的分区子句,如果没有则将结果集视为一个单一的大区。分析函数主要就是作用于分区结果。
Order-by-Clause 可选,针对分组内的排序Top
8 楼iyvewzhb(浪人)回复于 2005-01-13 11:13:05 得分 0
学习Top
9 楼yxxx(_小孬)回复于 2005-01-13 11:20:57 得分 0
学习Top
10 楼scorpionyjg()回复于 2005-01-13 11:24:57 得分 0
up!Top
11 楼NinGoo(http://www.NinGoo.net)回复于 2005-01-13 11:25:17 得分 0
row_number()真的很不错,听说sql server2005也引入了,期待~~Top
12 楼blueyyou(blueyyou)回复于 2005-01-13 14:23:02 得分 0
top3是什么意思?Top




