按照某个字段分组,取出最大的一条记录
2012-07-24 09:05
525 查看
请教一个sql(按某个字段分组然后从每组取出最大的一条纪录)?
请教一个sql(按某个字段分组然后从每组取出最大的一条纪录)?
比如表 data_table
字段有:id、name、address、tel、update
1 n1 a1 s1 20070801
2 n2 a1 s2 20070302
3 n3 a2 s3 20070501
4 n3 a2 s3 20070301
我想得到的数据是 按照 address 分组 然后取出每组中update最大的那几条纪录。结果应该是这两条纪录:
1 n1 a1 s1 20070801
3 n3 a2 s3 20070501
请问怎么写sql?谢谢
------解决方案--------------------------------------------------------
select id, name, address, tel, update
from (
select id, name, address, tel, update,
row_number() over(partition by address order by update desc) rn
from data_table
)
where rn = 1
------解决方案--------------------------------------------------------
SELECT * FROM A,(SELECT A.address,MAX(A.update) FROM A GROUP BY A.address) C
WHERE A.address = C.address
AND A.update = C.update
------解决方案--------------------------------------------------------
SQL> select *
2 from (
3 select tt.*,
4 row_number() over(partition by tt.address order by tt.update1 desc) rn
5 from (
6 select 1 as id, 'n1 ' as name, 'a1 ' as address, 's1 ' as tel, '20070801 ' as update1 from dual
7 union all
8 select 2 as id, 'n2 ' as name, 'a1 ' as address, 's2 ' as tel, '20070302 ' as update1 from dual
9 union all
10 select 3 as id, 'n3 ' as name, 'a2 ' as address, 's3 ' as tel, '20070501 ' as update1 from dual
11 union all
12 select 4 as id, 'n3 ' as name, 'a2 ' as address, 's3 ' as tel, '20070301 ' as update1 from dual
13 )tt
14 )zz
15 where zz.rn = 1;
ID NAME ADDRESS TEL UPDATE1 RN
---------- ---- ------- --- -------- ----------
1 n1 a1 s1 20070801 1
3 n3 a2 s3 20070501 1
------解决方案--------------------------------------------------------
select *
from data_table t
where not exists(select 1
from data_table
where address=t.address
and update> t.update)
请教一个sql(按某个字段分组然后从每组取出最大的一条纪录)?
比如表 data_table
字段有:id、name、address、tel、update
1 n1 a1 s1 20070801
2 n2 a1 s2 20070302
3 n3 a2 s3 20070501
4 n3 a2 s3 20070301
我想得到的数据是 按照 address 分组 然后取出每组中update最大的那几条纪录。结果应该是这两条纪录:
1 n1 a1 s1 20070801
3 n3 a2 s3 20070501
请问怎么写sql?谢谢
------解决方案--------------------------------------------------------
select id, name, address, tel, update
from (
select id, name, address, tel, update,
row_number() over(partition by address order by update desc) rn
from data_table
)
where rn = 1
------解决方案--------------------------------------------------------
SELECT * FROM A,(SELECT A.address,MAX(A.update) FROM A GROUP BY A.address) C
WHERE A.address = C.address
AND A.update = C.update
------解决方案--------------------------------------------------------
SQL> select *
2 from (
3 select tt.*,
4 row_number() over(partition by tt.address order by tt.update1 desc) rn
5 from (
6 select 1 as id, 'n1 ' as name, 'a1 ' as address, 's1 ' as tel, '20070801 ' as update1 from dual
7 union all
8 select 2 as id, 'n2 ' as name, 'a1 ' as address, 's2 ' as tel, '20070302 ' as update1 from dual
9 union all
10 select 3 as id, 'n3 ' as name, 'a2 ' as address, 's3 ' as tel, '20070501 ' as update1 from dual
11 union all
12 select 4 as id, 'n3 ' as name, 'a2 ' as address, 's3 ' as tel, '20070301 ' as update1 from dual
13 )tt
14 )zz
15 where zz.rn = 1;
ID NAME ADDRESS TEL UPDATE1 RN
---------- ---- ------- --- -------- ----------
1 n1 a1 s1 20070801 1
3 n3 a2 s3 20070501 1
------解决方案--------------------------------------------------------
select *
from data_table t
where not exists(select 1
from data_table
where address=t.address
and update> t.update)
相关文章推荐
- oracle 按某个字段分组然后从每组取出最大的一条纪录
- 获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)
- 获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)
- oracle按某个字段分组然后从每组取出最大的一条纪录
- sql获取分组后取某字段最大一条记录
- sql获取分组后取某字段最大一条记录
- 获取分组后取某字段最大一条记录
- 获取分组后取某字段最大的一条记录(求每个类别中最大的值的列表)
- oracle sql 按某个字段分组然后从每组取出最大的一条纪录
- 获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)
- Sql语句 表中相同的记录(某个字段)只显示一条,按照时间排序显示最大或最小
- 【Oracle】oracle sql 按某个字段分组然后从每组取出最大的一条纪录
- oracle sql 按某个字段分组然后从每组取出最大的一条纪录
- 获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)
- 获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)
- Sql2005 tips 按照某些条件(一个or多个)分组,取分组中满足某个条件的一条记录
- SQL 分组后获取其中一个字段最大值的整条记录
- Mongo分组取每组最大的一条记录
- SQL 分组后获取其中一个字段最大值的整条记录
- Mysql按字段分组取最大值记录