我们经常遇到这样的问题:查询数据中的记录,却有很多重复的数据,所以我们要求sql查询,使其不显示重复记录,这让我们不免想到distinct,可distinct只能查询到一个字段,要再显示其他的字段就出现错误信息了,再加其他的条件也是比较复杂的,一个比较简单的写法:
select * from 表名 where 重复的字段名 in(select distinct title from 表名 group by 重复的字段名 having count(重复的字段名)=1)
这样问题就解决了!
以上内容来自:
http://www.cnblogs.com/jian1982/archive/2010/07/06/1772300.htm
这篇文章其实是“半转贴”,因为下边是我自己的经验。
在许多重复记录里只显示一条,那么这一条多半与众不同:或者是日期最近,或者是金额最大,等等。
下面是我写过的一个查询。第一步将日期大于dd的记录考入一个临时表#temp1:
sql="select * into #temp1 from PriceList where UploadDate>='"
+dd
第二步把这个生成的临时表自我join,先求出相同SupplierID中最近的那条记录(maxDate)里的两个字段,然后再与原表关联,得出全部字段。
sql="
select a.* into #temp2 from #temp1 a inner join
(select MAX(UploadDate) maxDate, SupplierID from #temp1 group by SupplierID) b
on a.SupplierID=b.SupplierID and a.UploadDate=b.maxDate where a.SupplierID=100 or a.Quantity>10"
上面的查询命令就是:列出某日以后的PriceList记录,如果这期间某一供应商给出很多价格,则以最近的为准;供货商的库存少于十个不算(除非SupplierID等于100)。