请教一个oracle的查询语句的问题, 关于max()函数???

haoamz 发布于 2013/05/28 21:53
阅读 966
收藏 0

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

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

sql语句该怎么写呢???


加载中
0
petrarca
petrarca
select * from table a where a.time=(select max(time) from table b where a.name=b.name); right?
h
haoamz
谢谢~ select * from a where a.time=(select max(time) from a b where a.name=b.name);
Raynor1
Raynor1
这一条SQL应该可以满足楼主的要求。呵呵。。呵呵呵呵。。
八木
八木
我也是这么想的
0
黄龍
黄龍
select max(time),max(age),name from A t group by t.name;
0
h
haoamz

引用来自“HL_Simon”的答案

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

这样写不行啊. 

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

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

0
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟

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

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

0
iimax
iimax
如果有3个张三,age你取哪一个?
h
haoamz
time不会重复.
h
haoamz
取time字段值最大的那条记录的age.
0
IdleMan
IdleMan


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

Raynor1
Raynor1
口味是重啊。。
0
pfdoschina
pfdoschina

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

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)

返回顶部
顶部