有如下表A(ACTION_NO VARCHAR2(20),
FB_YEAR, CHAR(4),
FB_WEEK, CHAR(2),
FB_DESC, VARCHAR2(2000)
……)
记录各条行动的周反馈信息,现表中已有多条行动(各条行动的ActionNo号不一样,每条行动可能有条或多条反馈,年度有从2009年到2010年,周次也各不一样)如下:ACTION_NO FB_YEAR, FB_WEEK, FB_DESC, ……
0001 2009 35 ****
0001 2009 45 ****
0001 2010 04 ****
0001 2010 06 ****
0003 2009 50 ******
0003 2010 02 ****
0003 2010 03 ****
……………………………………
……………………………………求一SQL语句能够查询出各条行动的最新反馈情况,即查询出数据
0001 2010 06 ***** ……
0003 2010 03 ***** ……
……………………
……………………表中有多少个不同的行动号,查询结果就应该是多少条,每条结果应该是该行动号最新一次的反馈情况。。实在写不出该语句了,向大虾求解!!
FB_YEAR, CHAR(4),
FB_WEEK, CHAR(2),
FB_DESC, VARCHAR2(2000)
……)
记录各条行动的周反馈信息,现表中已有多条行动(各条行动的ActionNo号不一样,每条行动可能有条或多条反馈,年度有从2009年到2010年,周次也各不一样)如下:ACTION_NO FB_YEAR, FB_WEEK, FB_DESC, ……
0001 2009 35 ****
0001 2009 45 ****
0001 2010 04 ****
0001 2010 06 ****
0003 2009 50 ******
0003 2010 02 ****
0003 2010 03 ****
……………………………………
……………………………………求一SQL语句能够查询出各条行动的最新反馈情况,即查询出数据
0001 2010 06 ***** ……
0003 2010 03 ***** ……
……………………
……………………表中有多少个不同的行动号,查询结果就应该是多少条,每条结果应该是该行动号最新一次的反馈情况。。实在写不出该语句了,向大虾求解!!
解决方案 »
- 存储过程的问题,请高手解答一下
- 在oracle中创建表时提示表名无效!请大侠帮忙!
- 如何发布程序(VB2005,ODP.NET)
- oracle 用户名大小写问题
- 数据库连接串的奇怪问题(Connect Timeout一加就异常)
- 请问把word,ppt,pdf存入blob字段中能否进行中文的全文检索
- 遇到一个人员信息表被删除,怎么查原因。数据库有没有方法查出记录什么时候被删,是怎么被删,能否恢复
- 很基础的问题(并发进程)
- 一个用户如何才能访问另一个用户下的对象(比如SELECT * FROM USER1.TABLE1)?
- 求教,4机集群linux5.8+oracle10G拔掉一台机vip网线后全部重启
- ORACLE插入数据number型时出现错误
- 一个数据库问题,帮帮忙看看
--try it
select ACTION_NO FB_YEAR, FB_WEEK, FB_DESC
from
(
select ACTION_NO FB_YEAR, FB_WEEK, FB_DESC,
row_number()over(partition by ACTION_NO order by FB_YEAR desc,FB_WEEK desc) rn
from A
)
where rn = 1
(select ACTION_NO,FB_YEAR,FB_WEEK,FB_DESC,...,rank () over (partition by ACTION_NO order by FB_YEAR desc,FB_WEEK desc) rank)
where rank=1;
(select ACTION_NO,FB_YEAR,FB_WEEK,FB_DESC,...,rank () over (partition by ACTION_NO order by FB_YEAR desc,FB_WEEK desc) rank from a)
where rank=1;中间少了from。
Create Table A(ACTION_NO VARCHAR2(20),
FB_YEAR VARCHAR2(4),
FB_WEEK VARCHAR2(2),
FB_DESC VARCHAR2(2000) );
Insert Into a Values('0001','2009','35','aaa');
Insert Into a Values('0001','2009','32','bbb');
Insert Into a Values('0001','2010','31','ccc');
Insert Into a Values('0001','2010','03','ddd');
Insert Into a Values('0001','2011','03','ffff');
Insert Into a Values('0003','2008','14','ggg');
Insert Into a Values('0003','2010','27','eee');
Insert Into a Values('0003','2011','03','ffff');
Insert Into a Values('0003','2011','04','ffff');
Select Action_No, Fb_Year, Fb_Week, Fb_Desc
From (Select Action_No,
Fb_Year,
Fb_Week,
Fb_Desc,
Row_Number() Over(Partition By Action_No Order By Fb_Year Desc, Fb_Week Desc) Rn
From a)
Where Rn = 1
SELECT *
FROM a
WHERE (action_no, FB_YEAR || FB_WEEK) IN
(SELECT ACTION_NO, MAX(FB_YEAR || FB_WEEK) FROM a GROUP BY ACTION_NO);
--方法2
WITH a1 AS
(SELECT row_number() over(PARTITION BY ACTION_NO ORDER BY FB_YEAR, FB_WEEK) rn, a.* FROM a)
SELECT ACTION_NO FB_YEAR, FB_WEEK, FB_DESC
FROM a1
WHERE (ACTION_NO, rn) IN (SELECT ACTION_NO, MAX(rn) rn FROM a1 GROUP BY ACTION_NO);
where not exists(
select 1 from a where action_no=t.action_no
and fb_year||fb_week>t.fb_year||t.fb_week)