Cześć,
potrzebuję wyciągnąć osoby które w danym przedziale czasowym zmieniły firmę. Id firmy jest w karcie dostępu przypisanej do użytkownika. [AccessCard].[company_companyID]. Napisałem query używając 'exists', ale tu jest taki problem że wyników podzapytania w 'exists', nie mogę wyświetlić. Zatem zrobiłem to używając join. Zdziwiło mnie bo wg mnie wyniki powinny być takie same. Ale tak nie jest. Uwaga jedna osoba może mieć przypisaną jedną kartę w danym momencie. Jednak w zadanym okresie czasu mogła kilka razy zmieniać firmę, zastanawiam się jak wylistować wszystkie firmy dla danej osoby jeśli jest ich więcej niż 1 w danym przedziale czasowym
select
p.PersonID, p.lastName, p.firstName, p.jobPosition, p.birthDate,
ac.CardID, ac.lastPrintDate, ac.company_CompanyID
from
[Person] p
join [AccessCard] ac on p.PersonID = ac.person_PersonID
where
ac.lastPrintDate between '2015-01-06' and getdate()
and exists (
select ac2.company_CompanyID from [AccessCard] ac2
where ac2.person_PersonID = ac.person_PersonID
and ac2.lastPrintDate between '2015-01-06' and getdate()
and ac.company_CompanyID <> ac2.company_CompanyID
)
select
p.PersonID, p.lastName, p.firstName, p.jobPosition, p.birthDate,
ac.CardID as [CardId1], ac.lastPrintDate as [PrintDate1], ac.[company_CompanyID] as [Company1], ac2.CardID as [CardId2], ac2.lastPrintDate as [PrintDate2], ac2.[company_CompanyID] as [Company2]
from
[Person] p
join [AccessCard] ac
on p.PersonID = ac.person_PersonID
and ac.lastPrintDate between '2015-01-06' and getdate()
join [AccessCard] ac2
on ac2.person_PersonID = ac.person_PersonID
and ac2.lastPrintDate between '2015-01-06' and getdate()
and ac.company_CompanyID <> ac2.company_CompanyID