我现在要做一个查询语句(sqlserver)
主要目的要消除重复的注册号(EntRegNO)
现在数据库中有一个字段是日期型的AuthDate(取最大日期)
一个是状态标志EntStatusCode(只取=0的)
我用 
select EntRegNO ,max(AuthDate) from tdbase  where EntStatusCode=0 group by EntRegNO   查出来的数据是201299条

select  EntRegNO,EntName,Addr,DistCode,LeRepName,CBuItem,BizMethod,EstDate,OpFromDate,OpToDate,LicExpDate,EntTypeCode,IndClassCode,Memo,RegCap,CurrencyCode from tdBase T,(select EntRegNO E,max(AuthDate) A from tdbase  where EntStatusCode=0 group by EntRegNO) B where T.EntStatusCode=0 and T.AuthDate=B.A and T.EntRegNO=B.E and len(isnull(T.EntRegNO,''))>0  order by T.EntRegNO查出来的数据是201311条
怎么增加了12条?
现在不考虑结果
只考虑用分组出来的EntRegNO作为查询where条件过滤数据
如:select * from tdbase where EntRegNO=group中的遍历
请高手赐 sql

解决方案 »

  1.   

    同一注册号的日期有重复的吗?
    select EntRegNO ,max(AuthDate) from tdbase  where EntStatusCode=0 group by EntRegNO having count(distinct authdate)<>count(*)
    如果能查到记录,说明有,你恐怕就得用其他的方法判断日期相同的记录哪一个是最后一条了,比如表中的自编号id
      

  2.   

    select * from tdbase a
    inner join (select EntRegNO ,max(AuthDate) as Max_Date from tdbase  where EntStatusCode=0 group by EntRegNO) b on a.EntRegNO = b.EntRegNO and a.AuthDate = b.Max_Date
      

  3.   

    select * from tdbase as A
    where not exists(select 1 from tdbase where EntStatusCode=0 and EntRegNO=A.EntRegNO and AuthDate>A.AuthDate)
      

  4.   

    select  EntRegNO,max(AuthDate),EntName,Addr,DistCode,LeRepName,CBuItem,BizMethod,EstDate,OpFromDate,OpToDate,LicExpDate,EntTypeCode,IndClassCode,Memo,RegCap,CurrencyCode from tdBase
    where ...
    group by EntRegNO,EntName,Addr,DistCode,LeRepName,CBuItem,BizMethod,EstDate,OpFromDate,OpToDate,LicExpDate,EntTypeCode,IndClassCode,Memo,RegCap,CurrencyCode
    ?
      

  5.   

    select * from tdbase a
    inner join (select EntRegNO ,max(AuthDate) as Max_Date from (select distinct EntRegNO, AuthDate from tdbase where EntStatusCode=0) m group by EntRegNO) b on a.EntRegNO = b.EntRegNO and a.AuthDate = b.Max_Date
      

  6.   


    select a.* from tdbase a where a.AuthDate not in
    (select max(b.AuthDate) from tdbase b where b.EntRegNO=a.EntRegNO)
    and a.EntStatusCode = 0
      

  7.   

    怎么增加了12条?
    T.AuthDate=B.A对应的记录不是唯一的,所以会多记录
      

  8.   

    select * from tdBase t
    where AuthDate=(select max(AuthDate)--查询大的AuthDate
     from tdbase where EntRegNO=t.EntRegNO)
      

  9.   

    select count(*) from tdbase where EntStatusCode=0
    查询结果是201324select  EntRegNO  ,max(AuthDate)  from  tdbase    where  EntStatusCode=0  group  by  EntRegNO  having  count(distinct  authdate)  <  >count(*)  
    能查到记录
    1900-01-01 00:00:00
    的比较多
      

  10.   

    要查出的记录必须是EntStatusCode=0而且同时AuthDate最大EntRegNO要唯一
    主要是为了过滤重复的EntRegNO(不是主键),主键id不是自动增长的
    因为AuthDate=0的数据不唯一有多条EntRegNO都是相等的
    所以有加了一个条件AuthDate=0而且AuthDate最大的EntRegNO分组就取出了唯一的
    但是EntRegNO有为空的情况
    所以再去空
      

  11.   

    因为有这样的数据:EntRegNO AuthDate
    001 1900-1-1  0:00:00
    001 1900-1-1  0:00:00这种数据当然会得到重复的记录.
      

  12.   

    要取EntRegNO相同且EntStatusCode=0的一条数据的max(AuthDate)
    而不是一张表的max(AuthDate)select distinct EntRegNO from tdbase 查出来的数据是229100条
    select distinct EntRegNO from tdbase where  EntStatusCode=0查出来的数据是201229
      

  13.   


    select EntRegNO ,max(AuthDate) from tdbase  where EntStatusCode=0 group by EntRegNO 
    查数据的时候我取了max(AuthDate)是取出了EntRegNO相同的最大日期
    我明白了:通过EntRegNO和max(AuthDate)确定出来主键id然后再取数据
    要不就用2个条件同时取,但是那有没有办法匹配,谁知道哪个EntRegNO和哪个AuthDate是一起的
      

  14.   

    分析一下,如果EntRegNO ,max(AuthDate)能够唯一确定一笔记录,那么就不需要再去取id;
    如果EntRegNO ,max(AuthDate)不能够唯一确定一笔记录,那么它们两个栏位对应的多笔记录应该取哪一个id呢?