• 主页
  • Oracle 基础和管理
  • Oracle 高级技术
  • Oracle 认证与考试
  • 职位交流

请教一个SQL语句写法

lyj851011 2012-02-18 12:18:40
表中有三列数据如下。每个Code都有对应的每年365天的数据,在这里只截选若干。
我想实现的需求是:按照Code分组,针对每个Code的每条当前记录,都往前追溯查找60天,在这个60天的时间区间内,判断当前行的Number是否是60天中最大的6个Number之一(排在最大前6位)。请教各位如何实现,多谢!!

Date Code Number
19860416 TWEN 58992
19860417 TWEN 34700
19860418 TWEN 171123
19860419 TWEN 205239
19860420 TWEN 73000
19860421 TWEN 92216
19860422 TWEN 60700
19860324 XYZ 27306
19860325 XYZ 33600
19860326 XYZ 12607
19860327 XYZ 63013
19860328 XYZ 42674
19860329 XYZ 139275
19860330 XYZ 46708
19860331 XYZ 18170
19870401 XYZ 18170
19870402 XYZ 18170
19870403 XYZ 10535
19870404 XYZ 10535
19870405 XYZ 212410
19870406 XYZ 51900
19870407 XYZ 13020
...全文
99 点赞 收藏 4
写回复
4 条回复
lyj851011 2012年02月20日
多谢各位!!!
回复 点赞
ICE-word 2012年02月20日
SELECT case code IN (SELECT * FROM TABLEname t1 WHERE ROWNUM >6) THEN NUMBER END NULL FROM tablename t WHERE add_months (DATE,-2)
回复 点赞
我心飞翔 2012年02月20日
就是查找最大的6个Number罢。

实测数据:(已经修改)

CREATE TABLE T128
(
MyDate VARCHAR2(20),
CODE VARCHAR2(20),
MyNumber NUMBER
);

INSERT INTO T128 VALUES('19870401', 'TWEN', 58992);
INSERT INTO T128 VALUES('19870402', 'TWEN', 34700);
INSERT INTO T128 VALUES('19870403', 'TWEN', 171123);
INSERT INTO T128 VALUES('19870404', 'TWEN', 205239);
INSERT INTO T128 VALUES('19870405', 'TWEN', 73000);
INSERT INTO T128 VALUES('19870406', 'TWEN', 92216);
INSERT INTO T128 VALUES('19870407', 'TWEN', 60700);

INSERT INTO T128 VALUES('19860324', 'XYZ', 27306);
INSERT INTO T128 VALUES('19860325', 'XYZ', 33600);
INSERT INTO T128 VALUES('19860326', 'XYZ', 12607);
INSERT INTO T128 VALUES('19860327', 'XYZ', 63013);
INSERT INTO T128 VALUES('19860328', 'XYZ', 42674);
INSERT INTO T128 VALUES('19860329', 'XYZ', 139275);
INSERT INTO T128 VALUES('19860330', 'XYZ', 46708);
INSERT INTO T128 VALUES('19860331', 'XYZ', 18170);
INSERT INTO T128 VALUES('19870401', 'XYZ', 18170);
INSERT INTO T128 VALUES('19870402', 'XYZ', 18170);
INSERT INTO T128 VALUES('19870403', 'XYZ', 10535);
INSERT INTO T128 VALUES('19870404', 'XYZ', 10535);
INSERT INTO T128 VALUES('19870405', 'XYZ', 212410);
INSERT INTO T128 VALUES('19870406', 'XYZ', 51900);
INSERT INTO T128 VALUES('19870407', 'XYZ', 13020);


实测结果:

回复 点赞
mingchaoyan 2012年02月19日
初初看,是个组内排序的问题
回复 点赞
发动态
发帖子
Oracle
创建于2007-09-28

6415

社区成员

5.4w+

社区内容

Oracle开发相关技术讨论
社区公告
暂无公告