oracle修改数据时间长,关于中间表多次修改数据取修改时间最大值的有关问题

关于中间表多次修改数据取修改时间最大值的问题。

--drop table A1

create table A1

(

id NUMBER(11),

code varchar2(200),

time char(19),

type NUMBER(11)

);

insert into A1 (ID, CODE, TIME, TYPE)

values (1, 'A', '2014-08-06 10:22:00', 0);

insert into A1 (ID, CODE, TIME, TYPE)

values (2, 'B', '2014-08-07 10:22:00', 0);

insert into A1 (ID, CODE, TIME, TYPE)

values (3, 'C', '2014-08-08 10:21:00', 0);

insert into A1 (ID, CODE, TIME, TYPE)

values (4, 'C', '2014-08-09 10:21:00', 0);

insert into A1 (ID, CODE, TIME, TYPE)

values (5, 'C', '2014-08-10 10:21:00', 0);

insert into A1 (ID, CODE, TIME, TYPE)

values (6, 'C', '2014-08-11 10:21:00', 0);

insert into A1 (ID, CODE, TIME, TYPE)

values (7, 'C', '2014-08-12 10:21:00', 0);

insert into A1 (ID, CODE, TIME, TYPE)

values (8, 'D', '2014-08-12 10:21:00', 0);

insert into A1 (ID, CODE, TIME, TYPE)

values (9, 'D', '2014-08-12 10:21:00', 0);

insert into A1 (ID, CODE, TIME, TYPE)

values (10, 'D', '2014-08-12 10:21:00', 1);

表格应该是这样的

104112127.png

这个是修改多次反写 多次 到中间表中的数据。

其中C修改了5次 ,有5条历史记录,但是我只需要ID 7 也就是日期2014-08-12 10:21:00 这条最新的修改数据。

然后D虽然修改3次,但是type已经置为1了。 所以不需要 再次查询出来了。

然后我找了一个 SQL语句

SELECT *

FROM (SELECT ROW_NUMBER() OVER(PARTITION BY z.code ORDER BY z.time DESC) AS rnxx,

z.*

FROM A1 z

WHERE  type = 0)

WHERE rnxx = 1

先 得到这个表所有的 未处理的 日期最新的数据。但是 其中D却还存在着

104112128.png

然后 我想  后面加一个 not exists 只要 用编码查询本表的有 已处理 的数据 不就可以了吗

然后 我试了

SELECT *

FROM (SELECT ROW_NUMBER() OVER(PARTITION BY z.code ORDER BY z.time DESC) AS rnxx,

z.*

FROM A1 z

WHERE  type = 0)

WHERE rnxx = 1

AND not exists (SELECT 1

FROM a1 a

WHERE a.code = code

AND a.type = 1);

104112129.png

发现一条数据 都查不到。。

我最终需要的查询效果 应该是这样的。谁能告诉我下 这个怎么写?

104112130.png

------解决方案--------------------

type = 0条件放到外层,另外看你存在时间相同的记录 order里最好增加 id desc 排序

SELECT *

FROM (SELECT ROW_NUMBER() OVER(PARTITION BY z.code ORDER BY z.time DESC,ID DESC) AS rnxx,

z.*

FROM A1 z)

WHERE rnxx = 1 and  type = 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值