table表里有字段 a b c d 如下 a b c d
2001-1-1 123 张三 备注
2001-1-1 123 李四 备注
2002-1-1 123 张三 备注
2003-1-1 123 李四 备注我要通过查询 如果c字段相同的话 只取时间最大的 查询结果要如下
a b c d
2003-1-1 123 李四 备注
2002-1-1 123 张三 备注该如何写。。谢谢
2001-1-1 123 张三 备注
2001-1-1 123 李四 备注
2002-1-1 123 张三 备注
2003-1-1 123 李四 备注我要通过查询 如果c字段相同的话 只取时间最大的 查询结果要如下
a b c d
2003-1-1 123 李四 备注
2002-1-1 123 张三 备注该如何写。。谢谢
解决方案 »
- OCCI下如何使用setClob()
- oracle数据库多表连接查询优化问题
- 动态SQL问题,请高手赐教
- 我想问一下 oracle7.3的数据怎么可以导入到oracle9里面?
- 怎么判断一个值是否属于某个区域?
- 关于Oracle的驱动问题
- 无法在 DLL oci.dll 中找到名为 OCIEnvCreate 的入口点。 这个怎么解决?
- 一个机器上可能装两个版本的数据库比如8.0.5和8.1.7,可以的话怎么做呢
- 请问哪儿有完整详细的SQL92,SQL99标准 的SQL语法?
- Oracle还原dmp文件时报错IMP-00003: 遇到 ORACLE 错误 1658和ORA-01658:无法为表空间XXX中的段创建INITIAL区
- 监听器无法启动专用服务器进程错误
- 如何提高Oracle存储过程的执行效率
select t.a,t.b,t.c,t.d
from t where exists
(select * from (select c,max(a) a from t group by c )t2 where t.a=t2.a and t.c=t2.c)
from (select a,b,c,d,
ROW_NUMBER() OVER (PARTITION BY c ORDER BY a desc) as rn from table)
where rn=1
CREATE TABLE TABLE_A
(A DATE,
B INTEGER,
C VARCHAR2(10),
D VARCHAR2(10)
)
--------- 测试数据
INSERT INTO TABLE_A VALUES(TO_DATE('2001-1-1','YYYY-MM-DD'),'123','张三','备注');
INSERT INTO TABLE_A VALUES(TO_DATE('2001-1-1','YYYY-MM-DD'),'123','李四','备注');
INSERT INTO TABLE_A VALUES(TO_DATE('2002-1-1','YYYY-MM-DD'),'123','张三','备注');
INSERT INTO TABLE_A VALUES(TO_DATE('2003-1-1','YYYY-MM-DD'),'123','李四','备注');
COMMIT;
--------- SQL
SELECT A,
B,
C,
D
FROM (SELECT TABLE_A.*,
ROW_NUMBER() OVER(PARTITION BY C ORDER BY A DESC) AS R
FROM TABLE_A)
WHERE R <= 1 ----- 可以用 R<= N来确定取前N条记录
---------- 结果
A B C D
2003-1-1 123 李四 备注
2002-1-1 123 张三 备注
select * from tab a
where not exists(select 1 from tab b where a.c=b.c and a.a<b.a);
GROUP BY b,c,d
(a date,
b number,
c varchar2(20),
d varchar2(20));
insert into times values(to_date('2001-1-1','yyyy-mm-dd'),123,'tiantom','desc');
insert into times values(to_date('2001-1-1','yyyy-mm-dd'),123,'tian','desc');
insert into times values(to_date('2002-1-1','yyyy-mm-dd'),123,'tiantom','desc');
insert into times values(to_date('2003-1-1','yyyy-mm-dd'),123,'tian','desc');
commit;select t.a, t.b, t.c, t.d
from times t
where exists (select *
from (select c, max(a) a from times group by c) t2
where t.a = t2.a
and t.c = t2.c)
from table t1
(select distinct max(t.a) over(PARTITION BY c ORDER BY a desc) max_date,t.c
from table) t2
where t1.a = t2.max_date
and t1.c = t2.c