主题:  关于DISTINCT请教大家

悲伤的设计

职务:普通成员
等级:1
金币:1.0
发贴:158
#12004/2/14 16:56:10
select DISTINCT a from abc

我有一个表,表名:ABC,字段有id,a,b,c,然后我查询的时候只想把A重复的只显示一条,
于是用DISTINCT a,请问,这样做怎么样才能取出其它字段的值?
比如:DISTINCT a,b 这样一来,就变成了,A和b两个字段重复的只显示一条了

其实我的问题是这样:我要用在首页调用ABC表中的最新的n条信息,然而有一点,
在N条中若碰到A字段相同的则显示最新的那条,其它的不显示




悲伤的设计

职务:普通成员
等级:1
金币:1.0
发贴:158
#22004/2/14 22:13:22
自已顶一下



悲伤的设计

职务:普通成员
等级:1
金币:1.0
发贴:158
#32004/2/15 9:23:13
问题已得到解决,但不满意,应该有很简单的解决方法
<%
   sql="DBQ="+server.mappath("data.mdb")+";DRIVER={Microsoft Access Driver (*.mdb)};"
   set conn=server.createobject("ADODB.CONNECTION")
   conn.open sql 
   set rs=server.createobject("adodb.recordset")
   sql="select distinct a from abc GROUP BY a"
   rs.open sql,conn,1,1
   y=1
   for i=1 to rs.recordcount
   j=rs("a")
   set rss=server.createobject("adodb.recordset")
   sqll="select top 1 * from abc where a='"&j&"' order by id desc"
   rss.open sqll,conn,1,1
   y=y&","&rss("id")
   if rs.eof then exit for  
   rs.movenext
   next
   y=mid(y,3)
   response.write(y)
   set rsss=server.createobject("adodb.recordset")
   sqlll="select * from abc where id in ("&y&") order by id desc"
   rsss.open sqlll,conn,1,1
   do while rsss.eof=false
%> 
<table width="96%" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td><%=rsss("a")%></td>
    <td><%=rsss("b")%></td>
    <td><%=rsss("c")%></td>
  </tr>
</table>
<%
rsss.movenext
loop
   rs.close
   set rs=nothing
   rss.close
   set rss=nothing
   rsss.close
   set rsss=nothing
%>




缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#42004/2/15 22:03:35
SELECT b FROM ABC WHERE id in (SELECT DISTINCT a FORM abc)



悲伤的设计

职务:普通成员
等级:1
金币:1.0
发贴:158
#52004/2/15 23:00:40
你试过吗?我早就试过了,不行
SELECT DISTINCT a FroM abc
这句语句能找出id吗?



悲伤的设计

职务:普通成员
等级:1
金币:1.0
发贴:158
#62004/2/15 23:03:39
其实大家如果没做过的话可以研究一下,想想好像很简单但做起来好像不是很容易



缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#72004/2/15 23:10:50
SELECT b FROM ABC WHERE a in (SELECT DISTINCT a FORM abc)



悲伤的设计

职务:普通成员
等级:1
金币:1.0
发贴:158
#82004/2/16 8:33:52
a in的话不是搞了白搞



悲伤的设计

职务:普通成员
等级:1
金币:1.0
发贴:158
#92004/2/16 8:36:45
SELECT DISTINCT a FORM abc
出来的比方是:w,t,d
那你如果数据库里w的有五条,这五条不是还是显示出来了吗?我要求的是,五条同样是w的只显示最新的一条
这句早就试过了,不行



雨中的太阳

职务:普通成员
等级:1
金币:0.0
发贴:75
#102004/2/17 10:41:18
用GROUP BY 吧~~
如果ID可以决定是不是最新的的话可以这样
select *
from abc
where id in (select max(id) from abc group by a)

不过一般来讲,ID是自加字段,
也可以决定ID最大的也就是最新的了~
这样以上代码也就可行~~



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#112004/2/17 10:48:17
用 in 就决定了会取出所有在列表中的记录(不管有没有重复)

如果记录较多,这种查询会需要一定的性能成本。一种变通的办法是将最新数据存储在另一个更新表中,在添加或删除记录时对这个更新表进行维护。



悲伤的设计

职务:普通成员
等级:1
金币:1.0
发贴:158
#122004/2/19 0:25:32
是可以了,谢谢,但是数据库比较大,效率有些低,我只是写一段网站JS调用程序,程序和数据库我是不能改的,原来就有的,唉