Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit Select (https://www.delphipraxis.net/119041-problem-mit-select.html)

cugar 20. Aug 2008 04:17

Datenbank: InterBase • Version: 7.5 • Zugriff über: Delphi 2006 Prof.

Problem mit Select
 
Meine Abfrage sieht so aus:

SQL-Code:
select
k.GERAETEKUNDEID, V2.VORGANGSBEZEICHNUNG AS "VorHygieneBez", V1.VORGANGSBEZEICHNUNG AS "VorFilterBez", k.BEMERKUNG, k.FILTERWECHSEL, k.WARTUNG, k.KUNDENLIEFERMASTERID, k.VORGANGFILTER, k.VORGANGHYGIENE, k.GERAETEMASTERID, g.SERIENNR, a.ARTIKELBEZEICHNUNG, t.TYPBEZEICHNUNG
from
GERAETEKUNDE k, GERAETEN g, ARTIKELPALETTEN a, TYPEN t
JOIN GERAETVORGANG V1 ON (k.VORGANGFILTER = V1.GERAETVORGANGID)
JOIN GERAETVORGANG V2 ON (k.VORGANGHYGIENE = V2.GERAETVORGANGID)
where
k.GERAETEMASTERID=g.GERAETENID AND g.ARTIKELPALETTEMASTERID=a.ARTIKELPALETTENID AND a.TYPMASTERID=t.TYPENID
order by g.SERIENNR
Es funktioniert soweit, aber jetzt möchte ich noch eine letzte Tabelle hier mit einbinden:
Tabelle WartungHistory
HistoryID, Datum, Bemerkung, GerMasterID

Verknüpft soll die Tabelle über: GERAETEN.GeraetenID und GerMasterID werden, ich weiß dass es mit einem weiteren Join geht aber ich möchte das er mit den Datensatz (aus WartungHistory) mit dem höchsten Datum (ahb mit MAX(Datum) versucht, ging's aber nicht :-( ) ausgibt und da komme ich nicht weiter.
Ich weiß das diese Abfrage nicht optimal ist (bin noch Anfänger), wenn jemand einen besseren Vorschlag hat, dann freue ich mich wieder was dazu lernen zu können.

Viele Grüsse
Andreas

[edit=Sharky]SQL-Tags eingefügt. Mfg, Sharky[/edit]

NormanNG 20. Aug 2008 06:17

Re: Problem mit Select
 
Hi,

ich würde das so ergänzen:
(getippt - nicht getestet)
SQL-Code:
select
  k.GERAETEKUNDEID,
  V2.VORGANGSBEZEICHNUNG AS "VorHygieneBez",
  V1.VORGANGSBEZEICHNUNG AS "VorFilterBez",
  k.BEMERKUNG,
  k.FILTERWECHSEL,
  k.WARTUNG,
  k.KUNDENLIEFERMASTERID,
  k.VORGANGFILTER,
  k.VORGANGHYGIENE,
  k.GERAETEMASTERID,
  g.SERIENNR,
  a.ARTIKELBEZEICHNUNG,
  t.TYPBEZEICHNUNG,
  max( g2.Datum )
from GERAETEKUNDE k, GERAETEN g, ARTIKELPALETTEN a, TYPEN t
JOIN GERAETVORGANG V1 ON (k.VORGANGFILTER = V1.GERAETVORGANGID)
JOIN GERAETVORGANG V2 ON (k.VORGANGHYGIENE = V2.GERAETVORGANGID)
JOIN GERAETEN G2 ON (g2.GettaetenID = GerMasterID)
where k.GERAETEMASTERID=g.GERAETENID AND g.ARTIKELPALETTEMASTERID=a.ARTIKELPALETTENID AND a.TYPMASTERID=t.TYPENID
group by
  k.GERAETEKUNDEID,
  V2.VORGANGSBEZEICHNUNG,
  V1.VORGANGSBEZEICHNUNG,
  k.BEMERKUNG,
  k.FILTERWECHSEL,
  k.WARTUNG,
  k.KUNDENLIEFERMASTERID,
  k.VORGANGFILTER,
  k.VORGANGHYGIENE,
  k.GERAETEMASTERID,
  g.SERIENNR,
  a.ARTIKELBEZEICHNUNG,
  t.TYPBEZEICHNUNG

order by g.SERIENNR
[edit]verschreibser[/edit]

mkinzler 20. Aug 2008 06:31

Re: Problem mit Select
 
Welche Werte von Wartungshistorie benötigst du?

cugar 20. Aug 2008 07:06

Re: Problem mit Select
 
Danke für die schnelle Hilfe, brauche das letzte(neuste) (Datum der letzten Wartung) Datum. Dachte auch schon ans Gruppieren, wußte nur nicht wie ich es anfassen soll

Andreas

mkinzler 20. Aug 2008 07:10

Re: Problem mit Select
 
Dann könntest du auch einen Subselect verwenden

cugar 20. Aug 2008 07:24

Re: Problem mit Select
 
Wie könnte es aussehen (wird'S von InterBase unterstützt?)? Kann ich dann auf Aggregatfunktionen verzichten?

automatix 20. Aug 2008 10:38

Re: Problem mit Select
 
Hallo!

Nicht getestet!
Delphi-Quellcode:
select
   k.GERAETEKUNDEID,
   V2.VORGANGSBEZEICHNUNG AS "VorHygieneBez",
   V1.VORGANGSBEZEICHNUNG AS "VorFilterBez",
   k.BEMERKUNG,
   k.FILTERWECHSEL,
   k.WARTUNG,
   k.KUNDENLIEFERMASTERID,
   k.VORGANGFILTER,
   k.VORGANGHYGIENE,
   k.GERAETEMASTERID,
   g.SERIENNR,
   a.ARTIKELBEZEICHNUNG,
   t.TYPBEZEICHNUNG
from
   GERAETEKUNDE k
   join GERAETEN g
      on k.GERAETEMASTERID = g.GERAETENID
   join ARTIKELPALETTEN a
      on g.ARTIKELPALETTEMASTERID = a.ARTIKELPALETTENID
   join TYPEN t
      on a.TYPMASTERID = t.TYPENID
   JOIN GERAETVORGANG V1
      ON k.VORGANGFILTER = V1.GERAETVORGANGID
   JOIN GERAETVORGANG V2
      ON k.VORGANGHYGIENE = V2.GERAETVORGANGID
where
   g.GeraetenID in (
      select
         GerMasterID
      from
         (
            select
               GerMasterID,
               max(Datum)
            from
               WartungHistory
            group by
         )
   )
order by
   g.SERIENNR

NormanNG 20. Aug 2008 13:35

Re: Problem mit Select
 
Hi,

Zitat:

Zitat von mkinzler
Dann könntest du auch einen Subselect verwenden

Bei MSSQL sind Subselects weniger performant als eine Gruppiernug,
da hierbei das Subselect für jede Datenzeile der Ergebnisdatenmenge
ausgeführt werden muss (wie das bei Interbase ist weiss ich nicht,
möglicherweise ähnlich).

@automatix
[edit]falscher text entfernt - heute ist nicht mein tag :drunken: [/edit]

cugar 20. Aug 2008 13:51

Re: Problem mit Select
 
Ich teste beides durch, Gruppierung wird wohl die beste Lösung sein.
Danke für Eure Hilfe


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz