一个SQL的问题

cab1225 2009-11-03 12:33:42
我有一个表:GDGDGD 字段 NAME VARCHAR(10) STAT VARCHAR(10) DTA DATE

我想找出NAME重复中最大日期的数据。

如:原表:
NAME STAT DTA
111 11 2009-8-1
111 1 2009-9-1
222 22 2009-7-1
222 2 2009-6-1
333 3333 2009-5-1
333 333 2009-4-1
333 33 2009-3-1
333 3 2009-1-1
444 44 2009-10-1
555 5 2009-12-1


结果表:
NAME STAT DTA
111 1 2009-9-1
222 22 2009-7-1
333 3333 2009-5-1
444 44 2009-10-1
555 5 2009-12-1

这样的SQL语句应该怎么写呢!?
...全文
203 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Willowgao 2009-11-12
  • 打赏
  • 举报
回复
SELECT name,max(dta)FROM gdgdgd WHERE (name,dta)IN(select name,MAX(dta) FROM gdgdgd GROUP BY name) GROUP BY name
Willowgao 2009-11-12
  • 打赏
  • 举报
回复

SELECT * FROM gdgdgd WHERE (NAME,dta)= (SELECT NAME,,MAX(dta) FROM gdgdgd GROUP BY NAME,sata)
liuliuyushun 2009-11-11
  • 打赏
  • 举报
回复
444 44 2009-10-1
555 5 2009-12-1

要求是重复列的最大值,这两列都没有重复的,为什么还出现在结果表中?
liuliuyushun 2009-11-11
  • 打赏
  • 举报
回复
我有一个表:GDGDGD 字段 NAME VARCHAR(10) STAT VARCHAR(10) DTA DATE

我想找出NAME重复中最大日期的数据。

如:原表:
NAME STAT DTA


select * from GDGDGD G
where (select * from GDGDGD D
where G.DTA>D.DTA AND
D.NAME=G.NAME)
kbzl251 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wildwave 的回复:]
引用 1 楼 shiyiwan 的回复:
select NAME,    STAT ,    DTA
from
(select NAME,    STAT,      DTA,row_number() over(partition by name order by dta desc) rn
)
where rn = 1;

楼主要的就是这个结果吧。这个效率较高
也可以写成
select * from gdgdgd a
  where not exists(
    select 1 from gdgdgd
      where name=a.name and dta>a.dta)
[/Quote]

对,这样写很好
  • 打赏
  • 举报
回复
学习了
duqiangcise 2009-11-03
  • 打赏
  • 举报
回复
select *
from gdgdgd
where (name,dta)in
(
select name,max(dta) dta
from gdgdgd
group by name
)
shiyiwan 2009-11-03
  • 打赏
  • 举报
回复
select NAME, STAT , DTA
from
(select NAME, STAT, DTA,row_number() over(partition by name order by dta desc) rn
)
where rn = 1;
qq82296344 2009-11-03
  • 打赏
  • 举报
回复
1喽的相当精辟
yyx_blue 2009-11-03
  • 打赏
  • 举报
回复
还是比较倾向楼上的写法
happyasen 2009-11-03
  • 打赏
  • 举报
回复
SELECT NAME,STAT,MAX(DTA)
FROM GDGDGD
GROUP BY NAME,STAT
小灰狼W 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 shiyiwan 的回复:]
select NAME,    STAT ,    DTA
from
(select NAME,    STAT,      DTA,row_number() over(partition by name order by dta desc) rn
)
where rn = 1;
[/Quote]
楼主要的就是这个结果吧。这个效率较高
也可以写成
select * from gdgdgd a
where not exists(
select 1 from gdgdgd
where name=a.name and dta>a.dta)
luoyoumou 2009-11-03
  • 打赏
  • 举报
回复
select name, stat. dat
from gdgdgd g1
where exists (select name, max(dat) from gdgdgd g2 where g1.name=g2.name
group by name
having max(dat)=g1.dat )
luoyoumou 2009-11-03
  • 打赏
  • 举报
回复
select name, stat. dat
from gdgdgd g1
where exists (select name, max(dat) from gdgdgd g2 where g1.name=g2.name
having max(dat)=g1.dat )

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧