编程论坛's Archiver

北极光 发表于 2007-5-13 10:21

[求助]请教一个关于oracle的sql问题

在oracle的一张表里有四个字段:姓名,出生年月,发表文章名,发表文章号(假设为两位,按01-10的顺序自动生成).<br>每个人可能发表多篇文章;请问有什么样的sql可以将每个人最后一次发表文章的所有记录同时输出?<br>如下表:<br>
<TABLE borderColor=#cccccc cellSpacing=2 cellPadding=3 width="100%" bgColor=#ffffff border=1>

<TR>
<TD>
<P align=center> 姓名</P></TD>
<TD>
<P align=center>出生年月 </P></TD>
<TD>
<P align=center> 发表文章名</P></TD>
<TD>
<P align=center> 发表文章号</P></TD></TR>
<TR>
<TD>
<P align=center> a</P></TD>
<TD>
<P align=center>2000-01</P></TD>
<TD>
<P align=center>a 发表文章名1</P></TD>
<TD>
<P align=center> 01</P></TD></TR>
<TR>
<TD>
<P align=center> a</P></TD>
<TD>
<P align=center>2000-01 </P></TD>
<TD>
<P align=center>a 发表文章名2</P></TD>
<TD>
<P align=center> 02</P></TD></TR>
<TR>
<TD>
<P align=center> a</P></TD>
<TD>
<P align=center>2000-01 </P></TD>
<TD>
<P align=center>a 发表文章名3</P></TD>
<TD>
<P align=center> 03</P></TD></TR>
<TR>
<TD>
<P align=center> b</P></TD>
<TD>
<P align=center>2001-01 </P></TD>
<TD>
<P align=center>b发表文章名1</P></TD>
<TD>
<P align=center>     01    </P></TD></TR>
<TR>
<TD>
<P align=center> b</P></TD>
<TD>
<P align=center>2001-01 </P></TD>
<TD>
<P align=center>b 发表文章名2</P></TD>
<TD>
<P align=center> 02</P></TD></TR>
<TR>
<TD>
<P align=center> c</P></TD>
<TD>
<P align=center>2002-01 </P></TD>
<TD>
<P align=center>c 发表文章名1</P></TD>
<TD>
<P align=center> 01</P></TD></TR>
<TR>
<TD>
<P align=center> c</P></TD>
<TD>
<P align=center>2002-01 </P></TD>
<TD>
<P align=center>c 发表文章名2</P></TD>
<TD>
<P align=center> 02</P></TD></TR></TABLE><br>实现输出结果:<br>姓名          出生年月               发表文章名            发表文章号<br><br> a            2000-01              a 发表文章名3               03<br> b            2001-01              b 发表文章名2               02<br> c            2002-01              c 发表文章名2               02<br><br>请问这个select语句该怎么写吗?谢谢!    <br>
[align=right][color=#000066][此贴子已经被作者于2007-5-13 10:38:48编辑过][/color][/align]

solo214 发表于 2007-5-13 22:09

select * from 表名 where 姓名="a" and 发表文章号 in (select max(发表文章号) from 表名 where 姓名="a")<BR>or 姓名="b" and 发表文章号 in (select max(发表文章号) from 表名 where 姓名="b")<BR>or 姓名="c" and 发表文章号 in (select max(发表文章号) from 表名 where 姓名="c");<BR>

北极光 发表于 2007-5-15 08:14

谢谢你的解答<BR>但是你的回答不实用<BR>比如:对于一个四千人的库那我的select那岂不是要写很长。

solo214 发表于 2007-5-15 09:38

select * from 表名 where 发表文章号 in (select max(发表文章号) from 表名 where in (select distanct 姓名 from 表名))<BR><BR><BR>这个你试试的吧

心中有剑 发表于 2007-5-18 14:05

select 姓名,max(出生年月) as 出生年月 ,max(发表文章名) as 发表文章名,max(发表文章号) as 发表文章号 from 表明 group by 姓名 <BR><BR>这样应该就可以了吧<BR>

北极光 发表于 2007-5-24 10:19

<P>不好意思<BR>这几天忙,没能上来。<BR>我的问题,有点特殊,你们说的都不合用。<BR>谢谢你们的解答!<BR>结贴。</P>

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.