关于中间表多次修改数据取修改时间最大值的有关问题
关于中间表多次修改数据取修改时间最大值的问题。
表格应该是这样的

这个是修改多次反写 多次 到中间表中的数据。
其中C修改了5次 ,有5条历史记录,但是我只需要ID 7 也就是日期2014-08-12 10:21:00 这条最新的修改数据。
然后D虽然修改3次,但是type已经置为1了。 所以不需要 再次查询出来了。
然后我找了一个 SQL语句
先 得到这个表所有的 未处理的 日期最新的数据。但是 其中D却还存在着

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

发现一条数据 都查不到。。
我最终需要的查询效果 应该是这样的。谁能告诉我下 这个怎么写?

------解决方案--------------------
type = 0条件放到外层,另外看你存在时间相同的记录 order里最好增加 id desc 排序
--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);
表格应该是这样的
这个是修改多次反写 多次 到中间表中的数据。
其中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却还存在着
然后 我想 后面加一个 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);
发现一条数据 都查不到。。
我最终需要的查询效果 应该是这样的。谁能告诉我下 这个怎么写?
------解决方案--------------------
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