我现在要做一个查询语句(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
主要目的要消除重复的注册号(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
select EntRegNO ,max(AuthDate) from tdbase where EntStatusCode=0 group by EntRegNO having count(distinct authdate)<>count(*)
如果能查到记录,说明有,你恐怕就得用其他的方法判断日期相同的记录哪一个是最后一条了,比如表中的自编号id
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
where not exists(select 1 from tdbase where EntStatusCode=0 and EntRegNO=A.EntRegNO and AuthDate>A.AuthDate)
where ...
group by EntRegNO,EntName,Addr,DistCode,LeRepName,CBuItem,BizMethod,EstDate,OpFromDate,OpToDate,LicExpDate,EntTypeCode,IndClassCode,Memo,RegCap,CurrencyCode
?
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
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
T.AuthDate=B.A对应的记录不是唯一的,所以会多记录
where AuthDate=(select max(AuthDate)--查询大的AuthDate
from tdbase where EntRegNO=t.EntRegNO)
查询结果是201324select EntRegNO ,max(AuthDate) from tdbase where EntStatusCode=0 group by EntRegNO having count(distinct authdate) < >count(*)
能查到记录
1900-01-01 00:00:00
的比较多
主要是为了过滤重复的EntRegNO(不是主键),主键id不是自动增长的
因为AuthDate=0的数据不唯一有多条EntRegNO都是相等的
所以有加了一个条件AuthDate=0而且AuthDate最大的EntRegNO分组就取出了唯一的
但是EntRegNO有为空的情况
所以再去空
001 1900-1-1 0:00:00
001 1900-1-1 0:00:00这种数据当然会得到重复的记录.
而不是一张表的max(AuthDate)select distinct EntRegNO from tdbase 查出来的数据是229100条
select distinct EntRegNO from tdbase where EntStatusCode=0查出来的数据是201229
select EntRegNO ,max(AuthDate) from tdbase where EntStatusCode=0 group by EntRegNO
查数据的时候我取了max(AuthDate)是取出了EntRegNO相同的最大日期
我明白了:通过EntRegNO和max(AuthDate)确定出来主键id然后再取数据
要不就用2个条件同时取,但是那有没有办法匹配,谁知道哪个EntRegNO和哪个AuthDate是一起的
如果EntRegNO ,max(AuthDate)不能够唯一确定一笔记录,那么它们两个栏位对应的多笔记录应该取哪一个id呢?