Hallo #,
Folgende 2 Tabellen habe ich
Tab1 "Customer"
Id Integer
Name Varchar(X)
Tab2 "Customer_ADC"
Id Integer (PrimKey)
CustomerId Integer -> Ref Customer.Id
StartDate Date
EndDate Date
Die ASC enthält pro Kunde mehrere Einträge.
Ich brauche jetzt den
aktuellen Eintrag pro Kunde.
Aktuell heisst
EndDate>=:Heute, das StartDate lassen wir mal aussen vor
Sowas mache ich bisher immer mit einer SP etwa so (Pseudocode)
SQL-Code:
ForEach Customer
Select First 1 ADC.* From ADC
Where
(ADC.CustomerId=Customer.Id)
(EndDate>=:CheckDate)
Order by EndDateDesc
Wie bekomme ich das mit einer
SQL-Abfrage raus ?
Ob das Join oder Left Join ist, ist mir egal
Das es etwa 2000 Customer-Einträge sind,
sollte möglichst keine SubQuery drin sein.
Hm.
Mein SP sieht jetzt erst mal so aus.
SQL-Code:
CREATE PROCEDURE CUSTOMERASC_GETCURRENTASC (
THECHECKDATE DATE)
RETURNS (
Customer_Id INTEGER,
ASC_Id INTEGER,
ASC_StartDate DATE,
ASC_EndDate DATE)
AS
begin
For Select Customer.Id From Customer
Join Customer_ASC On Customer_ASC.CustomerId=Customer.Id
Into :Customer_Id do
begin
ASC_Id = NULL;
ASC_StartDate = NULL;
ASC_EndDate = NULL;
Select First 1 Id,StartDate,EndDate
From Customer_ASC
Where
(Customer_ASC.CustomerId=:Customer_Id) And
(Customer_ASC.EndDate>=:TheCheckDate)
Order By Customer_ASC.EndDate Desc
Into :ASC_Id,:ASC_StartDate,:ASC_EndDate;
if (ASC_Id Is Not NUll) then
begin
Suspend;
end
end /* Fro Select */
end
Danke
Heiko