![]() |
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:
so funktioniert das aber nicht?
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 auch nicht
SQL-Code:
wie kann ich da das Where aufbauen?
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID INTO MBID;
@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 |
Re: ORDER in Unterselect sehr langsam
Hallo,
SQL-Code:
Was kommt denn für eine Fehlermeldung ?
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 Wenn er wegen einer Variablen meckert, immer ein : davor ;) Zum Arbeiten empfehle ich IBExpert (gibt es auch als kostenlose Personal) Heiko |
Re: ORDER in Unterselect sehr langsam
Zitat:
hmmm, also bei dem hier, kommen flasche daten raus (er lädt gar nix rein .... )
SQL-Code:
und bei dem
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = ID INTO MBID;
SQL-Code:
kommt ein Fehler wegen dem ":"
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID INTO MBID;
Code:
Dynamic SQL Error
SQL error code = -901 undefined message number |
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 |
Re: ORDER in Unterselect sehr langsam
Bzw scheint der Client nicht zum Server zu passen.
|
Re: ORDER in Unterselect sehr langsam
oh, ja, der client passt nicht zum server, ist ne alte IBConsole ...
SQL-Code:
Das ist die SP, wobei es sich nur am :ID Parameter spiesst, habe statt dem auch ID1 probiert, geht auch nicht
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 ;#
SQL-Code:
wenn ichs so verwende, dann meckert er, das er ID1 nicht kennt
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = ID1 INTO MBID;
wenn ichs so verwende
SQL-Code:
dann läuft es durch, aber verwendet natrülich das Feld ID von TERMINAL_BUCHUNGEN, und läuft deshalb falsch ...
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = ID INTO MBID;
|
Re: ORDER in Unterselect sehr langsam
Müsste dann auch
SQL-Code:
heissen
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID1 INTO :MBID;
|
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:
oder liege ich da falsch?
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 |
Re: ORDER in Unterselect sehr langsam
Hallo,
lade dir doch endlich mal IBExpert runter, Mensch !!! ;)
SQL-Code:
execute block
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 ;# was zum Teufel ist das denn ??? OK, ich weiss, was es ist ;) Aber das hat hier nichts zu suchen.
SQL-Code:
wo ist das order by buchung desc ?
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID INTO MBID;
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] |
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 16:30 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