Oracle 上一条记录保存在表中的一列上
我有以下数据:Oracle 上一条记录保存在表中的一列上,oracle,plsql,Oracle,Plsql,我有以下数据: CLIENT_NO , DATE , TYPE CLIENT 1- 22/09/2014 -001 CLIENT 1- 19/09/2014 -002 CLIENT 1- 10/09/2014 -005 CLIENT 2- 15/09/2014 -012 CLIENT 2- 20/09/2014 -011 我希望随着时间的推移,每个客户机的最新类型都存储在此表中。如何使用PL/SQL实现这一点?好吧,您并不真正需要PL/SQL;纯SQL就可以了 一个选项是对它们进行排序(在本例
CLIENT_NO , DATE , TYPE
CLIENT 1- 22/09/2014 -001
CLIENT 1- 19/09/2014 -002
CLIENT 1- 10/09/2014 -005
CLIENT 2- 15/09/2014 -012
CLIENT 2- 20/09/2014 -011
我希望随着时间的推移,每个客户机的最新类型都存储在此表中。如何使用PL/SQL实现这一点?好吧,您并不真正需要PL/SQL;纯SQL就可以了 一个选项是对它们进行排序(在本例中,分析函数为
row\u number
或rank
help),然后获取行号为1的行(因为order by
子句按日期值降序排序)
请禁用大写锁定,然后将您的问题和标题都写在适当的情况下。所有大写字母的文本都很难阅读和理解,也不会让你更快得到答案。当你要求我们免费帮助你解决问题时,对我们大喊大叫也是非常不礼貌的。
SQL> with
2 test (client_no, datum, type) as
3 -- sample data
4 (select 'client 1', date '2014-09-22', '001' from dual union all
5 select 'client 1', date '2014-09-19', '002' from dual union all
6 select 'client 1', date '2014-09-10', '005' from dual union all
7 select 'client 2', date '2014-09-15', '012' from dual union all
8 select 'client 2', date '2014-09-20', '011' from dual
9 ),
10 -- sort them
11 sorted as
12 (select client_no, datum, type,
13 row_number() over (partition by client_no order by datum desc) rn
14 from test
15 )
16 -- select the one with RN = 1
17 select client_no, datum, type
18 from sorted
19 where rn = 1;
CLIENT_NO DATUM TYPE
---------- ---------- ----
client 1 22/09/2014 001
client 2 20/09/2014 011
SQL>