求 Oracle Sql语句,最好不要使用存储过程,原数据格式是这样的,
有name(varchar2),city_name(varchar2),reg_time(date) 三个字段,
name city_name reg_time
张三 广东 2012-01-11 12:10:00
李四 广东 2012-02-10 12:00:00
王五 江西 2012-04-12 10:40:00
张三 湖南 2012-05-12 15:40:00
李四 湖北 2012-05-02 10:40:00
张三 河南 2012-03-12 15:40:00
王五 淅江 2012-05-12 10:40:00
张三 广西 2012-04-16 17:40:00先要将name 字段相同的记录排在一起,然后再按 reg_time 最大的记录发在最前,
按一般的分组查询则为这样的结果
name city_name reg_time
李四 湖北 2012-05-02 10:40:00
李四 广东 2012-02-10 12:00:00
王五 淅江 2012-05-12 10:40:00
王五 江西 2012-04-12 10:40:00
张三 湖南 2012-05-12 15:40:00
张三 广西 2012-04-16 17:40:00
张三 河南 2012-03-12 15:40:00
张三 广东 2012-01-11 12:10:00 现在要得到的效果是name 相同的排在一起,但要按照reg_time 最新的整个组放在最前;
张三的reg_time 最新,所以应该排在最前面,其次是王五,最后则是李四。
name city_name reg_time
张三 湖南 2012-05-12 15:40:00
张三 广西 2012-04-16 17:40:00
张三 河南 2012-03-12 15:40:00
张三 广东 2012-01-11 12:10:00
王五 淅江 2012-05-12 10:40:00
王五 江西 2012-04-12 10:40:00
李四 湖北 2012-05-02 10:40:00
李四 广东 2012-02-10 12:00:00
有name(varchar2),city_name(varchar2),reg_time(date) 三个字段,
name city_name reg_time
张三 广东 2012-01-11 12:10:00
李四 广东 2012-02-10 12:00:00
王五 江西 2012-04-12 10:40:00
张三 湖南 2012-05-12 15:40:00
李四 湖北 2012-05-02 10:40:00
张三 河南 2012-03-12 15:40:00
王五 淅江 2012-05-12 10:40:00
张三 广西 2012-04-16 17:40:00先要将name 字段相同的记录排在一起,然后再按 reg_time 最大的记录发在最前,
按一般的分组查询则为这样的结果
name city_name reg_time
李四 湖北 2012-05-02 10:40:00
李四 广东 2012-02-10 12:00:00
王五 淅江 2012-05-12 10:40:00
王五 江西 2012-04-12 10:40:00
张三 湖南 2012-05-12 15:40:00
张三 广西 2012-04-16 17:40:00
张三 河南 2012-03-12 15:40:00
张三 广东 2012-01-11 12:10:00 现在要得到的效果是name 相同的排在一起,但要按照reg_time 最新的整个组放在最前;
张三的reg_time 最新,所以应该排在最前面,其次是王五,最后则是李四。
name city_name reg_time
张三 湖南 2012-05-12 15:40:00
张三 广西 2012-04-16 17:40:00
张三 河南 2012-03-12 15:40:00
张三 广东 2012-01-11 12:10:00
王五 淅江 2012-05-12 10:40:00
王五 江西 2012-04-12 10:40:00
李四 湖北 2012-05-02 10:40:00
李四 广东 2012-02-10 12:00:00
解决方案 »
- 安装了plsql developer 后登录无响应
- 问两个和基础的问题,麻烦指导下,谢谢!
- Oracle实现一个权限管理系统
- sql语句,插入多行
- 如何把一个表的一行数据 拷贝给另一个表啊 帮帮忙啊
- 请教一条SQL语句,关于 Select * from 表名 ,表名可以动态变化的
- oracle9i监听启动不了,提示"无法定位程序输入点snlpcsu_sleep_usecs于动态链接库oranl9.dll上
- 字段名称除了字母和数字以外还有什么字符是合法的?空格,括号,/,.-合法吗?字段名最长可以多长?数据表最多可以有多少个字段?
- 公司要做个内部订餐系统,我刚把SQL写好,小妹对SQL不是很熟,高手进来指点一下
- 请教各位大神一个统计的sql语句,感谢
- oracle开发知识求解
- ubuntu下有类似windows下的exp/imp命令吗?
create table t1 (name nvarchar2(10),city_name nvarchar2(10),reg_time date);insert into t1 values ('张三','广东',to_date('2012-01-11 12:10:00','yyyy-mm-dd hh24:mi:ss'));
insert into t1 values ('李四','广东',to_date('2012-02-10 12:00:00','yyyy-mm-dd hh24:mi:ss'));
insert into t1 values ('王五','江西',to_date('2012-04-12 10:40:00','yyyy-mm-dd hh24:mi:ss'));
insert into t1 values ('张三','湖南',to_date('2012-05-12 15:40:00','yyyy-mm-dd hh24:mi:ss'));
insert into t1 values ('李四','湖北',to_date('2012-05-02 10:40:00','yyyy-mm-dd hh24:mi:ss'));
insert into t1 values ('张三','河南',to_date('2012-03-12 15:40:00','yyyy-mm-dd hh24:mi:ss'));
insert into t1 values ('王五','淅江',to_date('2012-05-12 10:40:00','yyyy-mm-dd hh24:mi:ss'));
insert into t1 values ('张三','广西',to_date('2012-04-16 17:40:00','yyyy-mm-dd hh24:mi:ss'));
commit;select *
from t1
order by name,reg_time desc name city_name reg_time
---------------------------------------------------
1 张三 湖南 2012/5/12 15:40:00
2 张三 广西 2012/4/16 17:40:00
3 张三 河南 2012/3/12 15:40:00
4 张三 广东 2012/1/11 12:10:00
5 李四 湖北 2012/5/2 10:40:00
6 李四 广东 2012/2/10 12:00:00
7 王五 淅江 2012/5/12 10:40:00
8 王五 江西 2012/4/12 10:40:00
select *
from table1
order by name,reg_time desc
就可以,希望能夠幫到你吧
inner join (
select name,reg_time1,rownum rn from (select distinct name,max(reg_time) reg_time1 from test_t group by name order by reg_time1 desc)) t2
on t1.name= t2.name order by rn,reg_time desc
--name city_name reg_time
WITH t AS
(SELECT '张三' AS fname,
'广东' AS city,
'2012-01-11 12:10:00' AS regtime
FROM dual
UNION ALL
SELECT '李四','广东','2012-02-10 12:00:00' FROM dual
UNION ALL
SELECT '王五','江西','2012-04-12 10:40:00' FROM dual
UNION ALL
SELECT '张三','湖南','2012-05-12 15:40:00' FROM dual
UNION ALL
SELECT '李四','湖北','2012-05-02 10:40:00' FROM dual
UNION ALL
SELECT '张三','河南','2012-03-12 15:40:00' FROM dual
UNION ALL
SELECT '王五','淅江','2012-05-12 10:40:00' FROM dual
UNION ALL
SELECT '张三','广西','2012-04-16 17:40:00' FROM dual
UNION ALL
SELECT '麦六','淅江','2012-05-15 10:40:00' FROM dual
UNION ALL
SELECT '麦六','广西','2012-04-16 17:40:00' FROM dual
)
select t.* from (
select * from (
SELECT fname,
city,
to_date(regtime,'yyyy-mm-dd hh24:mi:ss') AS regtime,
rank()over(partition by fname order by to_date(regtime,'yyyy-mm-dd hh24:mi:ss') desc) as rankg
FROM t
) where rankg = 1 order by regtime desc
) a right join t on a.fname=t.fname--结果
FNAME CITY REGTIME
------ ------ -------------------
麦六 广西 2012-04-16 17:40:00
麦六 淅江 2012-05-15 10:40:00
张三 河南 2012-03-12 15:40:00
张三 湖南 2012-05-12 15:40:00
张三 广东 2012-01-11 12:10:00
张三 广西 2012-04-16 17:40:00
王五 淅江 2012-05-12 10:40:00
王五 江西 2012-04-12 10:40:00
李四 广东 2012-02-10 12:00:00
李四 湖北 2012-05-02 10:40:00
--你的需求我理解了。但是貌似还是不能做到我上面所理解的效果。仅仅只能分组排序
--如果在分组之后和组内排序之后还要做到整体"组"的排序怕是不行
--小生才疏学浅爱莫能助
select name,reg_time from
(select name,reg_time,rank()over(partition by name order by reg_time desc) as num from t1) s