2017-01-27 6 views
0

Ich habe diese allgemeine Tabelle Ausdruck, die Daten für Kunden, die Dienste erhalten haben S nach '2015-07-01' und die neueste Registrierung 'e' Datum sollte vor '2015 sein -07-01 ', aber die Ergebnismenge enthält Kunden, die nach' 2015-07-01 'erneut registriert wurden, da sie auch mehrere Registrierungsdienste haben. Nicht sicher, welche Klausel enthalten sein soll, um sicherzustellen, dass das LETZTE Registrierungsbeginndatum vor '2015-07-01' liegt.So erhalten Sie die neuesten Daten mit CTE

WITH PhoneLog AS 
(
select s.ProvidedToEntityID, 
concat (c.FirstName,' ', C.LastName) as ClientName, 
ecp.CellPhone, 
ecp.HomePhone, 
case ecp.PhoneVoiceOptIn 
when 1 then 'Yes' 
when 2 then 'No' 
Else 'Unknown' 
End as ContactViaPhone, 
    S.BeginDate ServiceStart, 
e.BeginDate EnrollmentBeginDate, 
case 
when Dateadd(YY,Datediff(YY,c.birthdate,getdate()), c.birthdate)> getdate() 
then datediff(YY,birthdate,getdate()) 
else datediff(YY,birthdate,getdate()) 
end as 'Current Age', 
e.X_ProgramStatus as 'program Status', 
ROW_NUMBER() over (Partition by s.providedtoEntityID order By s.begindate Desc) as ClientCount 
    from 
Client c 
Join Service s on c.EntityID = s.ProvidedByEntityID 
join servicetype st on s.ServiceTypeID = st.ServiceTypeID 
join Enrollmentmember Em on c.EntityID = em.ClientID 
join enrollment e on em.EnrollmentID = e.EnrollmentID 
join Entitycontactpreference ecp on c.entityid = ecp.entityid 
where s.BeginDate >= '2015-07-01' 
and e.BeginDate < '2015-07-01' 
--and s.BeginDate>e.BeginDate 
and ecp.PhoneVoiceOptIn = 1 
) 
SELECT 
ProvidedToEntityID, 
ClientName, 
[Current Age], 
cellphone, 
Homephone, 
ContactViaPhone, 
ServiceStart, 
EnrollmentBeginDate, 
ClientCount, 
[program Status] 

FROM 
    PhoneLog 
WHERE 
    ClientCount = 1 
+0

bin ich nicht sicher, warum Sie einen CTE verwenden. Es scheint nicht, dass es etwas für dich hinzufügt. Ich würde empfehlen, eine Art von ROW_NUMBER OVER (Partition durch Client-ID ORDER BY ENTROLLMENT DESC) hinzufügen RNK ... dann Filter auf nur RNK1, um spätestens zu bekommen. –

+0

Können Sie Beispieldaten und erwartete Ergebnisse bereitstellen? – Xedni

Antwort

0

Funktioniert das?

ersetzt and e.BeginDate < '2015-07-01' mit

-- ... 
and e.BeginDate = (select max(e_i.BeginDate) 
        from enrollment e_i 
        where e_i.BeginDate < '2015-07-01') 
-- ... 
+1

Danke viel gearbeitet, also habe ich

Verwandte Themen