Thema: Delphi FB: Hilfe bei Join

Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

FB: Hilfe bei Join

  Alt 4. Dez 2009, 07:59
Datenbank: Firebird • Version: 2.1 • Zugriff über: egal
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
Heiko
  Mit Zitat antworten Zitat