Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Allg. SQL-Problem (https://www.delphipraxis.net/180268-allg-sql-problem.html)

wendelin 6. Mai 2014 10:57

Datenbank: Interbase • Version: 6 • Zugriff über: Ibx-Komp.

Allg. SQL-Problem
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,
vielleicht kann mir ja jemand auf die Sprünge helfen.

TextFile 'example_All' ist ein kleiner Ausschnitt der ges. Tabelle.

TextFile 'example_3' kommt meiner Wunschausgabe schon sehr nahe, allerdings
sollte hier nur EIN Aktiennahme auftauchen in Verbindung mit der entsprechenden Indikator-Periode
auf die der MAX-Wert (Pfeile sind von mir nachträglich eingezeichnet) zeigt.

TextFile 'example_2' würde meiner Wunschausgabe entsprechen. (Die ausdrücke in Klammern sind von
mir nachträglich eingezeichnet)
Wie könnte der korr. SQL-befehl lauten ? Oder lässt sich dieses Problem ohne weitere Tabellen (View's)
oder SubQueries überhaupt nicht lösen ?

Danke

MrSpock 6. Mai 2014 11:13

AW: Allg. SQL-Problem
 
Du darfst dann nicht nach INDEP gruppieren.

Dejan Vu 6. Mai 2014 16:48

AW: Allg. SQL-Problem
 
Wenn Du in der Lage bist, deine Wunschausgabe zu beschreiben "Zeige mir alle ...je.... die.., wobei..." dann sollte sich daraus ohne großen Aufwand die entsprechende SQL-Anweisung generieren lassen.

EarlyBird 6. Mai 2014 20:56

AW: Allg. SQL-Problem
 
Ungetestet könnte es in etwa so gehen:
Code:

SELECT TBL1.STOCK, TBL1.BALANCE, MYSQL1.INDPE FROM
  (SELECT STOCK, MAX(BALANCE) AS BALANCE FROM MYSQL1 GROUP BY STOCK) AS TBL1 
  LEFT OUTER JOIN MYSQL1 ON TBL1.Status = MYSQL1.Status AND TBL1.BALANCE = MYSQL1.BALANCE

Mokus 7. Mai 2014 16:34

AW: Allg. SQL-Problem
 
Code:
SELECT STOCK,INDPE,MAX(BALANCE) FROM MYSQL1 WHERE BALANCE <> 0 GROUP BY STOCK

versuch es doch mal ohne INDPE
würde dir evtl schon reichen ( wenn es das ist, was du brauchst )


[EDIT]

du willst ja den INDPE von dem MAX wert, das würd mit den oben geschriebende Abfrage nicht gehen
[/edit]

p80286 7. Mai 2014 18:00

AW: Allg. SQL-Problem
 
Ich denke EarlyBird liegt da schon ganz richtig:
Code:
SELECT TBL1.STOCK
      ,MYSQL1.INDPE
      ,TBL1.BALANCE
FROM (SELECT STOCK, MAX(BALANCE) AS BALANCE FROM MYSQL1 GROUP BY STOCK) AS TBL1 
          JOIN MYSQL1 ON (TBL1.STOCK = MYSQL1.STOCK AND TBL1.BALANCE = MYSQL1.BALANCE)
(klitzekleine Änderung)

nur wo kommen die 528,.. bei ADDIDAS her???

Gruß
K-H

wendelin 13. Mai 2014 11:36

AW: Allg. SQL-Problem
 
Hallo p80286,

zunächst einmal DANKE für Deine Antwort.
Leider funktioniert auch Deine Version (mit der IBConsole) nicht !

Die '528' bei ADDIDAS kommen daher, das ich für JEDE Aktie das höchste Ergebnis haben möchte,
siehe example_3. Ferner sollte nicht nur der Aktiename (dieser ist obligatorisch) sondern auch
INDPE (Periode des entsprechenden techn. Indikators) auf welchen MAX(Balance) zeigt. Siehe
example2 !

Gruß ,
Wendelin

wendelin 30. Jun 2014 21:30

AW: Allg. SQL-Problem SELECT zum Zweiten
 
Hallo,
ich möchte Euch als erstes meine Lösung vorstellen, welche auch gut funktioniert :

************************************************** ********************
SELECT T1.ID1,T1.INDPE,T1.STOCK,T1.DAYS,T1.BALANCE [oder auch T1.*]
FROM MYSQL1 T1
LEFT OUTER JOIN MYSQL1 T2
ON (T1.STOCK = T2.STOCK AND (T1.BALANCE < T2.BALANCE
OR T1.BALANCE = T2.BALANCE AND T1.ID1 < T2.ID1))
WHERE T2.BALANCE IS NULL <-- [AND T1.BALANCE <> 0] kann
angehängt werden und ist dann
um den Faktor 6 schneller !
************************************************** ********************
Leider funkt. auch die Antwort von p80286 nicht! Die IB-Console meckert
beim 2. SELECT nach der 1. Klammer Error-Code -104


AUCH das angepasste SQL-Statement des Artikels:
http://www.sql-und-xml.de/sql-praxis...zelzeilen.html
funkt. nicht !
************************************************** ********************
SELECT A.*
FROM MySQL1 A INNER JOIN
(SELECT B.STOCK, Max(B.BALANCE) As MaxBalance
FROM MySQL1 B
GROUP BY B.STOCK) C
ON A.STOCK = C.STOCK And
A.BALANCE = C.MaxBalance

Auch hier meckert die IB-Console ErrorCode -104 (3.Zeile - 2. SELECT) !
Wenn ich jedoch nur : (SELECT B.STOCK, Max(B.BALANCE) As MaxBalance
FROM MySQL1 B
GROUP BY B.STOCK) eingebe läuft alles wunderbar, allerdings ohne die restl.
Felder, die ich benötige !

Es muss also an der Aggregatfunkt. 'GROUP BY' liegen.
Wer hat eine Antwort darauf ?

Wendelin

mkinzler 30. Jun 2014 21:44

AW: Allg. SQL-Problem
 
Es liegt nicht daran, sondern einfach an der Tatsache, dass IB6 keine DERIVED Tables kann. dieses Feature wurde in erst FireBird 2 eingeführt. Ich würde Dir raten, FireBird einzusetzen.

wendelin 1. Jul 2014 12:24

AW: Allg. SQL-Problem
 
Sehr geehrter Herr Kinzler,

Vielen Dank für Ihre schnelle Antwort.

Ich habe erstmal im Internet recherchieren müssen, da mir der Begriff 'DERIVED Tables'
nicht bekannt war.
(Schließlich bin ich nur Hobby-Programmierer und hatte beruflich niemals etwas mit
EDV bzw. IT zu tun).
Daher bitte ich auch meine manchmal etwas niveaulosen Fragen zu entschuldigen.

Ich nehme an, daß Sie mit Ihrer Antwort richtig liegen.

Nun habe ich noch eine Frage.
Wenn ich mich für FirebirdXX entscheiden würde, aber Delphi 7 mit seinen IBX-Komponenten
unbedingt behalten möchte

a) Welche Firebird - Version würden Sie mir empfehlen bezügl. Stabilität und Performance?
b) Läuft diese FB-Vers. auch unter WIN XP / WIN 7 ?

m.f.G. Wolfgang


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz