Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ORDER in Unterselect sehr langsam (https://www.delphipraxis.net/141653-order-unterselect-sehr-langsam.html)

Gruber_Hans_12345 14. Okt 2009 08:41

Re: ORDER in Unterselect sehr langsam
 
@webcss: Das liefert auch die falschen daten

Ich brauche eine Liste von Personal, und zusätzlich brauche ich zu jedem Personal den Auftrag, den er zuletzt gestempelt hat (die letzte Stempelung ist jene, wo BUCHUNG am größten ist)

SQL-Code:
  for execute statement
    'select ID FROM PERSONAL' into ID1
  DO begin
    ID = ID1;
    MBID = null;
    SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = ID INTO MBID;
    suspend;
  end
so funktioniert das aber nicht?

so auch nicht
SQL-Code:
    SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID INTO MBID;
wie kann ich da das Where aufbauen?

@hoika
ja TB.Buchung hat beide Indexe (hatte einen Screenshott von IBConsole drauf)

@omata:
es ist mal egal ob die Personal ohne aufträge angezeigt werden oder nicht

nur die 1te Abfrage dauert ca 4Minuten (und liefert irgendwie komische daten ;) )
die 2te dauert auch ca 4min
die 3te dauert auch ca. 4min

hoika 14. Okt 2009 09:02

Re: ORDER in Unterselect sehr langsam
 
Hallo,

SQL-Code:
for select ID FROM PERSONAL into ID1
  DO begin
    ID = ID1;
    MBID = null;
    SELECT FIRST 1 TB.AUFTRAGID FROM
    TERMINAL_BUCHUNGEN TB
    WHERE TB.PERSONALID = ID
   
    order by TB.Buchung Desc          ////  das hatte noch gefehlt

    INTO MBID;

    suspend;
  end
Was kommt denn für eine Fehlermeldung ?

Wenn er wegen einer Variablen meckert, immer ein : davor ;)

Zum Arbeiten empfehle ich IBExpert (gibt es auch als kostenlose Personal)


Heiko

Gruber_Hans_12345 14. Okt 2009 09:18

Re: ORDER in Unterselect sehr langsam
 
Zitat:

Zitat von hoika
Hallo,

SQL-Code:
for select ID FROM PERSONAL into ID1
  DO begin
    ID = ID1;
    MBID = null;
    SELECT FIRST 1 TB.AUFTRAGID FROM
    TERMINAL_BUCHUNGEN TB
    WHERE TB.PERSONALID = ID
   
    order by TB.Buchung Desc          ////  das hatte noch gefehlt

    INTO MBID;

    suspend;
  end
Was kommt denn für eine Fehlermeldung ?

Wenn er wegen einer Variablen meckert, immer ein : davor ;)

Zum Arbeiten empfehle ich IBExpert (gibt es auch als kostenlose Personal)


Heiko


hmmm, also bei dem hier, kommen flasche daten raus (er lädt gar nix rein .... )

SQL-Code:
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = ID INTO MBID;
und bei dem
SQL-Code:
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID INTO MBID;
kommt ein Fehler wegen dem ":"

Code:
Dynamic SQL Error
SQL error code = -901
undefined message number

hoika 14. Okt 2009 16:24

Re: ORDER in Unterselect sehr langsam
 
Hallo,

zeige doch nch mal den kompletten Quellcodce der SP.

Message-Number:
Kann es sein, dass du mehrere Firebird-Installationen auf deinem Rechner hast ?
Der scheint in der falschen firebird.msg zu suchen.


Heiko

mkinzler 14. Okt 2009 16:26

Re: ORDER in Unterselect sehr langsam
 
Bzw scheint der Client nicht zum Server zu passen.

Gruber_Hans_12345 14. Okt 2009 17:05

Re: ORDER in Unterselect sehr langsam
 
oh, ja, der client passt nicht zum server, ist ne alte IBConsole ...

SQL-Code:
set term #;

execute block
returns (ID INTEGER, MBID INTEGER)
as
declare variable ID1 INTEGER;
begin
  for execute statement
    'select ID FROM PERSONAL' into ID1
  DO begin
    ID = ID1;
    MBID = null;
    SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID INTO MBID;
    suspend;
  end
end

#
set term ;#
Das ist die SP, wobei es sich nur am :ID Parameter spiesst, habe statt dem auch ID1 probiert, geht auch nicht

SQL-Code:
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = ID1 INTO MBID;
wenn ichs so verwende, dann meckert er, das er ID1 nicht kennt

wenn ichs so verwende
SQL-Code:
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = ID INTO MBID;
dann läuft es durch, aber verwendet natrülich das Feld ID von TERMINAL_BUCHUNGEN, und läuft deshalb falsch ...

mkinzler 14. Okt 2009 17:48

Re: ORDER in Unterselect sehr langsam
 
Müsste dann auch
SQL-Code:
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID1 INTO :MBID;
heissen

nahpets 14. Okt 2009 18:27

Re: ORDER in Unterselect sehr langsam
 
Hallo,

@Gruber_Hans_12345

momentan begreife ich nicht ganz, was Du möchtest:

Dein erstes Select sieht für mich so aus:

Gesucht wird der erste Satz, bei absteigender Sortierung nach BUCHUNG, aus der Tabelle TERMINAL_BUCHUNGEN, zu dem PERSONALID mit der ID aus der Tabelle PERSONAL übereinstimmt.

Das dürfte dann doch eigentlich sowas sein:
SQL-Code:
select FIRST 1 P.ID, TB.AUFTRAGID, TB.BUCHUNG
from PERSONAL P, TERMINAL_BUCHUNGEN TB
where P.ID = TB.PERSONAL_ID
ORDER BY TB.BUCHUNG DESC
oder liege ich da falsch?

hoika 14. Okt 2009 19:11

Re: ORDER in Unterselect sehr langsam
 
Hallo,

lade dir doch endlich mal IBExpert runter, Mensch !!! ;)


SQL-Code:
set term #;

execute block
returns (ID INTEGER, MBID INTEGER)
as
declare variable ID1 INTEGER;
begin
  for execute statement
    'select ID FROM PERSONAL' into ID1
  DO begin
    ID = ID1;
    MBID = null;
    SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID INTO MBID;
    suspend;
  end
end

#
set term ;#
execute block
was zum Teufel ist das denn ???
OK, ich weiss, was es ist ;)
Aber das hat hier nichts zu suchen.

SQL-Code:
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID INTO MBID;
wo ist das order by buchung desc ?


Vorschlag

SQL-Code:
CREATE PROCEDURE SP_Bla
RETURNS (
    ID INTEGER,
    MBID INTEGER)
AS
begin
  for select ID FROM PERSONAL into :ID
  DO begin
    MBID = null;
    SELECT FIRST 1 TB.AUFTRAGID
    FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = ID
    order by tb.buchung desc
    INTO :MBID
    suspend;
  end
end


Heiko

[edit=mkinzler]SQL-Code in SQL-Tags gepackt Mfg, mkinzler[/edit]

Gruber_Hans_12345 15. Okt 2009 07:56

Re: ORDER in Unterselect sehr langsam
 
@hoika

mach ich dann gleich :)

oh, stimmt das order by viel weg ...
das problem bei deiner SQL ist, das er beim WHERE TB.PERSONALID = ID, nicht den ID von den variablen her nimmt, sondern den von TB ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:50 Uhr.
Seite 3 von 5     123 45      

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