请教一个关于排序的问题,谢谢

[复制链接]
查看11 | 回复9 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
原数据如下:
IDLEVELYEAR
----- -----------------
1
D
2008
2
A
2008
2
A
2007
3
A
2008
3
B
2007
ID:代表公司代码
LEVEL:代表公司评级的结果
YEAR:代表评级的年份
(同一个ID不会有相同的YEAR,同一ID的YEAR可能不连续)
期望结果:
IDLEVELYEAR
----- -----------------
3
A
2008
2
A
2008
1
D
2008
2
A
2007
3
B
2007
1. 按照YEAR倒序排列时,LEVEL字段同上一年进行比较,如果LEVEL有变化,则此行记录靠前。
2. LEVEL没有变化的,靠后;
3. 如果没有上一年的记录时,再靠后
4. 以上相同时,按照ID正序
请问如何实现,谢谢了
---------------------------------------------------------
如果加上2006年的话,像下面这样。
公司很多,只举例3个。每个公司的年份会不一样,大概有近10年的记录。
ID
LEVELYEAR
------- ---------- -----------
com1
A2008
com2
B2008
com1
A2007
com2
C2007
com3
D2008
com2
A2006
com3
E2007
com3
F2006
……
……
……
那么结果应该是:
com2 B2008
com3 D2008
com1 A2008
com2 C2007
com3 E2007
com1 A2007
com2 A2006
com3 F2006
比如说公司com1,它2008年和2007年评级结果都是A,没有变化;
公司com3,它2008年和2007年评级结果分别是D和E,有变化,
那么YEAR=2008的记录排序时,公司com3就排在公司com1前面。
依此类推。
谢谢。
[ 本帖最后由 tonyjet 于 2009-5-18 17:50 编辑 ]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
好奇怪的问题。等高手来
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
不是太明白,这样可以吗
SQL> select * from t1 order by year desc,ll,id desc;
ID LL
YEAR
---------- ---------- ----------
3 A
2008
2 A
2008
1 A
2008
2 A
2007
3 B
2007
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
谢谢楼上,虽然结果是一样的,可是没有LEVEL的“比较”实现。
那我再编辑一下原帖。谢谢啦
[ 本帖最后由 tonyjet 于 2009-5-18 16:43 编辑 ]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
SQL> with t as (select 1 as id, 'A' as ll ,2008 as year from dual union all
2
select 2 as id, 'A' as ll ,2008 as year from dual union all
3
select 3 as id, 'A' as ll ,2008 as year from dual union all
4
select 2 as id, 'A' as ll ,2007 as year from dual union all
5
select 3 as id, 'B' as ll ,2007 as year from dual )
6select id,ll,year from t
7order by year desc,decode(lead(ll,1,null)over(partition by id order by year desc),ll,2,null,3,1) ,id
8;

ID LL YEAR
---------- -- ----------
3 A2008
2 A2008
1 A2008
2 A2007
3 B2007
LZ看看对不对,如果再有 2006 年的话应该是什么样的呢
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
如果加上2006年的话,像下面这样。
公司很多,只举例3个。每个公司的年份会不一样,大概有近10年的记录。
ID
LEVELYEAR
------- ---------- -----------
com1
A2008
com2
B2008
com1
A2007
com2
C2007
com3
D2008
com2
A2006
com3
E2007
com3
F2006
……
……
……
那么结果应该是:
com2 B2008
com3 D2008
com1 A2008
com2 C2007
com3 E2007
com1 A2007
com2 A2006
com3 F2006
比如说公司com1,它2008年和2007年评级结果都是A,没有变化;
公司com3,它2008年和2007年评级结果分别是D和E,有变化,
那么YEAR=2008的记录排序时,公司com3就排在公司com1前面。
依此类推。
谢谢。
[ 本帖最后由 tonyjet 于 2009-5-18 17:50 编辑 ]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
支持jiqing1004 兄的解决方案
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
jiqing1004 正解
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
厉害,学习了
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
全称是北京实正嘉业科技有限公司,这个公司专门欠发员工工资,不管是新员工还是老员工,都将拖欠,受害人有杨金融、黄建峰,陈建文,郭利飞,马腾,张爱福等人。
该公司是做电力行业中发电厂方面MIS,专门从象电子商务网等公司接手二手工程。至于老板之一何创辉就是一个阴,以公司资金困难为由,不发给员工工资,以上拖欠工资的人中,还有2008年2月的工资没有发放的。
以上内容我以人格担保真实性,我现在手头还有这个公司老板之一何创辉写给我的欠条,并且我能联系上以上人拖欠人。如果需要调查真实正,请发邮件到[email protected]
北京实正嘉业科技有限公司的网站是http://www.cysz.cn/
大家找工作要当心了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行