Ich habe das Gefühl, das ist ganz einfach, aber ich kann mich nicht auf die Abfrage legen. Ich versuche alle Aktivitäten eines Mitarbeiters zu finden, die ihrem Startdatum an einem bestimmten Ort entsprechen.Abfrage, um Datumszeilen älter als ein Startdatum zu erhalten (nicht eine einfache WHERE)
create table Locations (EmployeeID int, LocationID int, StartDate date);
create table Activities (EmployeeID int, ActivityID int, [Date] date);
insert into Locations values
(1, 10, '01-01-2010')
, (1, 11, '01-01-2012')
, (1, 11, '01-01-2013');
insert into Activities values
(1, 1, '02-01-2010')
, (1, 2, '04-01-2010')
, (1, 3, '06-06-2014');
Erwartetes Ergebnis:
EmployeeID LocationID StartDate EmployeeID ActivityID Date
1 10 '01-01-2010' 1 1 '02-01-2010'
1 10 '01-01-2010' 1 2 '04-01-2010'
1 11 '01-01-2013' 1 3 '06-06-2014'
Bisher habe ich das, aber es ist durchaus nicht geben mir das Ergebnis, das ich gehofft hatte. Ich muss irgendwie nur auf die Informationen vom letzten Standort verweisen, die die la.StartDate <= a.Date
nicht ausfiltert und auch Informationen von älteren Standorten enthält.
select *
from Locations la
inner join Activities a on la.EmployeeID = a.EmployeeID
and la.StartDate <= a.Date
Das ist schlecht, Datenbank-Design. In der Tabelle Aktivitäten sollte ein FK in der Tabelle Aktivitäten vorhanden sein. – mxix
@mxix Ich stimme zu, aber das ist, woran ich arbeiten muss. –
Können Sie ein EndDate an Standorten einführen? Das würde die Dinge ein wenig vereinfachen. – NickyvV