7
回答
请教一个oracle的查询语句的问题, 关于max()函数???
开发十年,就只剩下这套Java开发体系了   

如上图中有表A, 三个字段,四条记录. 想要的查询结果是第2,3,4条记录(包含全部三个字段).

也就是所有记录中NAME字段相同时,取TIME字段最大的那个.

sql语句该怎么写呢???


举报
haoamz
发帖于5年前 7回/950阅
共有7个答案 最后回答: 5年前
select * from table a where a.time=(select max(time) from table b where a.name=b.name); right?
--- 共有 3 条评论 ---
haoamz谢谢~ select * from a where a.time=(select max(time) from a b where a.name=b.name); 5年前 回复
Raynor1这一条SQL应该可以满足楼主的要求。呵呵。。呵呵呵呵。。 5年前 回复
八木我也是这么想的 5年前 回复

引用来自“HL_Simon”的答案

select max(time),max(age),name from A t group by t.name;

这样写不行啊. 

您把age字段也取最大值了. 而我想要的不是这样. 我想要的是: age字段无需取最大值.

如果表A有下图中左边窗口的四条数据, 查询结果就是右边窗口那样, 查出的第三条数据就不对了,第三条记录的age应该是"7"才对.

如果是我,肯定要加一个唯一列。

你应该把所有的行的值都改成一样的,这样就更能体现增删改查。


WITH A AS
 (SELECT '张三' NAME, 40 TIME, 7 AGE
    FROM DUAL
  UNION
  SELECT '李四' NAME, 30 TIME, 8 AGE
    FROM DUAL
  UNION
  SELECT '王五' NAME, 50 TIME, 8 AGE
    FROM DUAL
  UNION
  SELECT '张三' NAME, 60 TIME, 8 AGE FROM DUAL
 )
SELECT DISTINCT  NAME, TIME, AGE 
  FROM A
 WHERE EXISTS (SELECT NULL
          FROM (SELECT NAME, MAX(TIME) MTIME FROM A GROUP BY NAME) X
         WHERE A.NAME = X.NAME
           AND A.TIME = X.MTIME)


NAME       TIME        AGE
---- ---------- ----------
李四         30          8
王五         50          8
张三         60          8

--- 共有 1 条评论 ---
Raynor1口味是重啊。。 5年前 回复

引用来自“龚继云”的答案

select * from table a where a.time=(select max(time) from table b where a.name=b.name); right?

我一直这样写,只是不知与楼上的写法相比效率如何。

select * 
from 
(
select name, max(time) maxTime
from table
group by name
) a
left join table b on (a.name=b.name and a.maxTime=b.time)

顶部