有一组数据
TRADER_NAME USERID NUM_HITS A_D STOCK_TYPE num
张三 10029 0 3.22580338 T1 1
张三 10029 0 1.73745477 T1 2
张三 10029 0 1.06423676 T1 3
张三 10029 0 0.790478902 UU 4
李四 10191 0 9.54616833 T1 5
李四 10191 0 3.54118586 T1 6
李四 10191 0 2.90064979 T4 7
李四 10191 0 1.33270192 UU 8
李四 10191 0 0.193418801 UU 9
李四 10191 0 -2.59446764 TM 10
小陈 10231 0 0.710478902 T1 11
小陈 10231 0 0.790478902 T4 12
我想查询的结果是
张三 10029 0 3.22580338 T1
李四 10191 0 9.54616833 T1
小陈 10231 0 0.790478902 T4
即三个人中a_d字段值最大的一组数据
我试过这样
select max(a_d),TRADER_NAME from 表名 group by trader_name
这是可以查出来,但是只查出了两个字段,一个是a_d,一个是trader_name,我想把其他字段也查出来,
也就是以trader_name分组,a_d最大值的一条数据,
请问应该怎么写sql语句呢。
TRADER_NAME USERID NUM_HITS A_D STOCK_TYPE num
张三 10029 0 3.22580338 T1 1
张三 10029 0 1.73745477 T1 2
张三 10029 0 1.06423676 T1 3
张三 10029 0 0.790478902 UU 4
李四 10191 0 9.54616833 T1 5
李四 10191 0 3.54118586 T1 6
李四 10191 0 2.90064979 T4 7
李四 10191 0 1.33270192 UU 8
李四 10191 0 0.193418801 UU 9
李四 10191 0 -2.59446764 TM 10
小陈 10231 0 0.710478902 T1 11
小陈 10231 0 0.790478902 T4 12
我想查询的结果是
张三 10029 0 3.22580338 T1
李四 10191 0 9.54616833 T1
小陈 10231 0 0.790478902 T4
即三个人中a_d字段值最大的一组数据
我试过这样
select max(a_d),TRADER_NAME from 表名 group by trader_name
这是可以查出来,但是只查出了两个字段,一个是a_d,一个是trader_name,我想把其他字段也查出来,
也就是以trader_name分组,a_d最大值的一条数据,
请问应该怎么写sql语句呢。
解决方案 »
- oracle 运行较慢
- 返回系统时间函数?
- 我建了一个数据库Txun,我想知道如何获得这个库里有多少个表
- oracledbconsoleorcl 不能启动
- 求救!!!解决办法 ORA-01555&ORA-06512
- 急~~~~~~~请教关于having的使用
- 利用oracle union 取出同一表同一记录不同字段时如何排序?
- 各位大狭:这种在SYBASE的语句在ORACLE中怎么实现???
- 求助:使用varchar2类型开数组长度受限问题(内详)!!
- Oracle8.1.6.0在WINDOWS2000下为什么一启动ManagementServer时就报错??
- 问题
- Oracle中trigger的几个问题
(select TRADER_NAME,max(a_d) as a_d from tbl group by TRADER_NAME) t
where tbl.TRADER_NAME=t.TRADER_NAME and tbl.a_d = t.a_d;最大的两条,那就返回两条了。。
from 表名 a
where not exists (select 1 from 表名 where USERID=a.USERID and A_D>a.A_D)
还可以用
select *
from(
select a.*,dense_rank()over(partition by userid order by a_d desc)dk
from 表名 a)
where dk=1数据量大的话比较下执行计划
(TRADER_NAME varchar2(10), USERID number,NUM_HITS number,A_D number,STOCK_TYPE varchar2(10), num number);
insert into test values ('张三', 10029, 0, 3.22580338, 'T1', 1);
insert into test values ('张三', 10029, 0, 1.73745477, 'T1', 2);
insert into test values ('张三', 10029, 0, 1.06423676, 'T1', 3);
insert into test values ('张三', 10029, 0, 0.790478902, 'UU', 4);
insert into test values ('李四', 10191, 0, 9.54616833, 'T1', 5);
insert into test values ('李四', 10191, 0, 3.54118586, 'T1', 6);
insert into test values ('李四', 10191, 0, 2.90064979, 'T4', 7);
insert into test values ('李四', 10191, 0, 1.33270192, 'UU', 8);
insert into test values ('李四', 10191, 0, 0.193418801, 'UU', 9);
insert into test values ('李四', 10191, 0, 0.00446764, 'TM', 10);
insert into test values ('小陈', 10231, 0, 0.710478902, 'T1', 11);
insert into test values ('小陈', 10231, 0, 0.790478902, 'T4', 12);
commit;
select * from test t;
select *
from test a
where (a.trader_name, a.userid, a.num_hits, a.a_d) in
(select t.trader_name, t.userid, t.num_hits, max(t.a_d) "t.a_d"
from test t
group by t.trader_name, t.userid, t.num_hits);
select *
from (select t.*,
row_number() over(partition by t.trader_name order by t.a_d desc) rn
from test t)
where rn = 1;
from(
select a.*,dense_rank()over(partition by userid order by a_d desc)dk
from 表名 a)
where dk=1
from(
select a.*,dense_rank()over(partition by userid order by a_d desc)dk
from 表名 a)
where dk=1
Omz
from tab_test t)
where rn = 1 order by num
group by TRADER_NAME, USERID, NUM_HITS, STOCK_TYPE, num
SELECT t.TRADER_NAME,
t.userid,
t.num_hits,
MAX(t.A_D) over (PARTITION BY t.userid) max_a_d,
t.stock_type,
t.num
FROM t;
使用Oracle的分析函数
FROM (
SELECT t.TRADER_NAME,
t.userid,
t.num_hits,
MAX(t.A_D) over (PARTITION BY t.userid) max_a_d
row_number() over (PARTITION BY t.userid ORDER BY t.A_D) rk,
t.stock_type,
t.num
FROM t) tmp
WHERE tmp.rk = 1;