約100件の重複(約4万件のレコードのうち)を回避するために使用しているサブクエリで髪の毛を抜いています。正当な理由でh2.datecreatedに2つの日付があるため、複製されたレコードが表示されているため、データをスクラブするだけでは不十分です。
一番早い日付だけを返そうとしています。最初のサブクエリ(「selectdistinct address_id」で始まり、MINが付いている)はそれ自体で正常に機能します...重複は返されません。したがって、左の結合(または単純な結合...私も試しました)は、サブクエリに表示されないため、2番目のh2.datecreatedを表示できない可能性があります。しかし、クエリ全体を実行すると、一部のipc.mfgidに対して2つの値が返されます。1つは必要なh2.datecreatedを使用し、もう1つは不要な値を返します。
私はそれが本当に単純なもの、または単に不可能なものでなければならないことを知っています。本当にうまくいくようです!これはMSSQLです。ありがとう!
select distinct ipc.mfgid as IPC, h2.datecreated,
case when ad.Address is null
then ad.buildingname end as Address, cast(trace.name as varchar)
+ '-' + cast(trace.Number as varchar) as ONT,
c.ACCOUNT_Id,
case when h.datecreated is not null then h.datecreated
else h2.datecreated end as Install
from equipmentjoin as ipc
left join historyjoin as h on ipc.id = h.EQUIPMENT_Id
and h.type like 'add'
left join circuitjoin as c on ipc.ADDRESS_Id = c.ADDRESS_Id
and c.GRADE_Code like '%hpna%'
join (select distinct address_id, equipment_id,
min(datecreated) as datecreated, comment
from history where comment like 'MAC: 5%' group by equipment_id, address_id, comment)
as h2 on c.address_id = h2.address_id
left join (select car.id, infport.name, carport.number, car.PCIRCUITGROUP_Id
from circuit as car (NOLOCK)
join port as carport (NOLOCK) on car.id = carport.CIRCUIT_Id
and carport.name like 'lead%'
and car.GRADE_Id = 29
join circuit as inf (NOLOCK) on car.CCIRCUITGROUP_Id = inf.PCIRCUITGROUP_Id
join port as infport (NOLOCK) on inf.id = infport.CIRCUIT_Id
and infport.name like '%olt%' )
as trace on c.ccircuitgroup_id = trace.pcircuitgroup_id
join addressjoin as ad (NOLOCK) on ipc.address_id = ad.id