AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SELECT FIRST 1 im JOIN möglich ?
Thema durchsuchen
Ansicht
Themen-Optionen

SELECT FIRST 1 im JOIN möglich ?

Ein Thema von MyRealName · begonnen am 14. Sep 2017 · letzter Beitrag vom 14. Nov 2017
 
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#12

AW: SELECT FIRST 1 im JOIN möglich ?

  Alt 11. Nov 2017, 23:37
Was Du in #5 gemacht hast, das Subselect aus der Select Clause in den Join verschieben geht in der Form nicht. Der Bezug zu IA fehlt da innen drin, man kann da drinnen nichts referenzieren, was draußen in der Nachbarmenge liegt.
Das geht nur beim Subselect in der Select Clause, wie Du es vorher hattest oder auch mit CTE, wie vorgeschlagen, aber da ist mir auf die Schnelle nichts zu eingefallen.
Die Subselects wie Du es gemacht hast, sind praktisch, aber nicht die schnellsten. Für jeden Satz der Hauptmenge wird das Subselect neu gemacht.
Wenn man das Subselect als separaten Join baut, läuft das eleganter. Man muss allerdings die Joinkriterien mit nach außen legen.
Und dass ein First dann keinen Sinn mehr ergibt, weil eine große Ergebnismenge erzeugt wird, ist dann auch klar.

Was ich bei Dir in #5 nicht verstehe, was die Aggregate im äußeren Select sollen. Mir ist allerdings auch nicht klar, wie die Tabelle ItemAct strukturiert ist und was es mit der qty auf sich hat.
Ich würde es so versuchen:

Code:
SELECT IA.ItemId, IA.Item, IA.Qty, CP1.CP Costo  
  FROM ItemAct IA join
      (select f.itemid, f.cp, f.fecha, f.LOCATION     -- Eintrag am nächstem zum Stichtag mit CP
         from cp_fecha f join
             (SELECT ItemId , LOCATION, max(fecha) as fechamax -- Eintrag am nächstem zum Stichtag
                FROM Cp_Fecha                                 -- cp fehlt noch
               WHERE Fecha <= :cp_param
               group by itemid, LOCATION) fm
           on f.itemid = fm.itemid
          and f.fecha = fm.fechamax
          and f.LOCATION = fm.LOCATION) CP1 
           on cp1.ItemID = IA.ItemID;
Ob die Location bei der Sache eine Rolle spielt oder nicht, musst Du selber wissen, wenn nicht dann raus.
Gruß, Jo
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz