消除重复记录,解答者全分送

ldzyz007 2007-01-16 12:35:33
我现在要做一个查询语句(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
...全文
500 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengqinxu 2007-01-16
  • 打赏
  • 举报
回复
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
?
marco08 2007-01-16
  • 打赏
  • 举报
回复
select * from tdbase as A
where not exists(select 1 from tdbase where EntStatusCode=0 and EntRegNO=A.EntRegNO and AuthDate>A.AuthDate)
DragonBill 2007-01-16
  • 打赏
  • 举报
回复
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
hyc_music1981 2007-01-16
  • 打赏
  • 举报
回复
同一注册号的日期有重复的吗?
select EntRegNO ,max(AuthDate) from tdbase where EntStatusCode=0 group by EntRegNO having count(distinct authdate)<>count(*)
如果能查到记录,说明有,你恐怕就得用其他的方法判断日期相同的记录哪一个是最后一条了,比如表中的自编号id
ldzyz007 2007-01-16
  • 打赏
  • 举报
回复
问题已经解决
此帖已结
bugchen888 2007-01-16
  • 打赏
  • 举报
回复
分析一下,如果EntRegNO ,max(AuthDate)能够唯一确定一笔记录,那么就不需要再去取id;
如果EntRegNO ,max(AuthDate)不能够唯一确定一笔记录,那么它们两个栏位对应的多笔记录应该取哪一个id呢?
ldzyz007 2007-01-16
  • 打赏
  • 举报
回复
问题还没有解决
ldzyz007 2007-01-16
  • 打赏
  • 举报
回复
可是分组的时候怎么查主见id啊
ldzyz007 2007-01-16
  • 打赏
  • 举报
回复

select EntRegNO ,max(AuthDate) from tdbase where EntStatusCode=0 group by EntRegNO
查数据的时候我取了max(AuthDate)是取出了EntRegNO相同的最大日期
我明白了:通过EntRegNO和max(AuthDate)确定出来主键id然后再取数据
要不就用2个条件同时取,但是那有没有办法匹配,谁知道哪个EntRegNO和哪个AuthDate是一起的
zzxiaoma 2007-01-16
  • 打赏
  • 举报
回复
里面数据其他字段可能有空值
ldzyz007 2007-01-16
  • 打赏
  • 举报
回复
要取EntRegNO相同且EntStatusCode=0的一条数据的max(AuthDate)
而不是一张表的max(AuthDate)

select distinct EntRegNO from tdbase 查出来的数据是229100条
select distinct EntRegNO from tdbase where EntStatusCode=0查出来的数据是201229
bugchen888 2007-01-16
  • 打赏
  • 举报
回复
因为有这样的数据:

EntRegNO AuthDate
001 1900-1-1 0:00:00
001 1900-1-1 0:00:00

这种数据当然会得到重复的记录.
ldzyz007 2007-01-16
  • 打赏
  • 举报
回复
神人快来呀
我在线等待
ldzyz007 2007-01-16
  • 打赏
  • 举报
回复
要查出的记录必须是EntStatusCode=0而且同时AuthDate最大EntRegNO要唯一
主要是为了过滤重复的EntRegNO(不是主键),主键id不是自动增长的
因为AuthDate=0的数据不唯一有多条EntRegNO都是相等的
所以有加了一个条件AuthDate=0而且AuthDate最大的EntRegNO分组就取出了唯一的
但是EntRegNO有为空的情况
所以再去空

ldzyz007 2007-01-16
  • 打赏
  • 举报
回复
select count(*) from tdbase where EntStatusCode=0
查询结果是201324

select EntRegNO ,max(AuthDate) from tdbase where EntStatusCode=0 group by EntRegNO having count(distinct authdate) < >count(*)
能查到记录
1900-01-01 00:00:00
的比较多
中国风 2007-01-16
  • 打赏
  • 举报
回复
select * from tdBase t
where AuthDate=(select max(AuthDate)--查询大的AuthDate
from tdbase where EntRegNO=t.EntRegNO)
中国风 2007-01-16
  • 打赏
  • 举报
回复
怎么增加了12条?
T.AuthDate=B.A对应的记录不是唯一的,所以会多记录
yangala 2007-01-16
  • 打赏
  • 举报
回复

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
Augustans 2007-01-16
  • 打赏
  • 举报
回复
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

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧