我有张表,表结构如下:
ID NAME DATE NUM STATUS
1 张三 2010-08-19 80 12
2 张三 2010-08-18 70 12
3 张三 2010-08-10 60 23
4 张三 2010-08-11 90 23
5 李四 2010-08-16 60 12
6 李四 2010-08-19 70 12
7 李四 2010-08-10 60 23
8 李四 2010-08-11 80 23我怎么查询出这样的结果啊?不同的人在同一status下最大的num
ID NAME DATE NUM STATUS
1 张三 2010-08-19 80 12
4 张三 2010-08-11 90 236 李四 2010-08-19 70 128 李四 2010-08-11 80 23
ID NAME DATE NUM STATUS
1 张三 2010-08-19 80 12
2 张三 2010-08-18 70 12
3 张三 2010-08-10 60 23
4 张三 2010-08-11 90 23
5 李四 2010-08-16 60 12
6 李四 2010-08-19 70 12
7 李四 2010-08-10 60 23
8 李四 2010-08-11 80 23我怎么查询出这样的结果啊?不同的人在同一status下最大的num
ID NAME DATE NUM STATUS
1 张三 2010-08-19 80 12
4 张三 2010-08-11 90 236 李四 2010-08-19 70 128 李四 2010-08-11 80 23
SELECT ID NAME DATE NUM STATUS FROM tablea a
WHERE EXISTS(SELECT 1 FROM t1 b WHERE a.name=b.name AND a.status=b.status AND a.num=b.num)
select a.*
from
(
select name,status,max(num) num
from table_name t
group by name,status
) a,table_name b
where a.name=b.name and a.status=b.status and a.num=b.num
不过这个方法有个缺陷,要是对象name一样、status一样而且num也一样的记录,2条都会显示出来
SELECT * FROM (SELECT ROW_NUMBER () OVER( PARTITION BY STATUS
ORDER BY NUM DESC) RN,A.* FROM YOUR_TABLE A) B
WHERE B.RN=1
select A.* from 表A,(select NAME,STATUS, max(num) as maxnum from 表A group by NAME,STATUS ) 表B
where A.NAME = B.NAME and A.STATUS = B.STATUS and a.num = b.maxnum
ORDER BY NUM DESC) RN,A.* FROM YOUR_TABLE A) B
WHERE B.RN=1;
用分析函数按名字和状态分区,然后按num逆向排序取编号,再在外层取编号为1的数据。4楼的高手分区那里少写了个字段。