![]() |
Re: Ersatz für DISTINCT ??
nicht überredet...
m2.ABDATUM_OUT gibt es nicht Macht man dann daraus folgendes:
SQL-Code:
so erhält man eine leere Datenmenge.
select m1.MWSTSATZ, m1.MWSTWERT
from MWST m1 join MWST m2 on (m2.MWSTSATZ = m1.MWSTSATZ) where m2.ABDATUM <= :ABDATUM group by m1.MWSTSATZ, m1.ABDATUM, m1.MWSTWERT having m1.ABDATUM = max(m2.ABDATUM) order by m1.MWSTSATZ into :MWSTSATZ_OUT, :MWSTWERT_OUT Gruß onlinekater |
Re: Ersatz für DISTINCT ??
hi onlinekater,
sei doch mal ein wenig flexibler :)
SQL-Code:
jetzt überredet?
select
m1.ID, m1.MWSTSATZ, m1.ABDATUM, m1.MWSTWERT from MWST m1 join MWST m2 on (m2.MWSTSATZ = m1.MWSTSATZ) where m2.ABDATUM <= :ABDATUM group by m1.ID, m1.MWSTSATZ, m1.ABDATUM, m1.MWSTWERT having m1.ABDATUM = max(m2.ABDATUM) order by m1.MWSTSATZ |
Re: Ersatz für DISTINCT ??
Zitat:
Der Code, den Du geradr gepostet hast, ergänzt ja auch nur ein paar Felder. Die leere Datenmenge kam nicht durch die SQL-Anweisung zustande, sondern dadurch, daß in meinem IBExpert neuerdings der Null-Haken nicht verschwindet, wenn man einen Value einträgt .... :wall: :wall: :wall: Werte sind nun da Zitat:
Ich möchte aber dazu noch anmerken, daß die Methode von dataspider und mir weniger Reads benötigt (auch wenn diese indiziert sind). Jetzt bleibt es Hansas Geschmack überlassen, was er einsetzen möchte. Gruß Thomas |
Re: Ersatz für DISTINCT ??
[krümelkackermodus]
Zitat:
jetz nochmal:
SQL-Code:
Ergebnis:
CREATE PROCEDURE ERMITTLE_ALLEMWSTSP (
ABDATUM DATE) RETURNS ( ID_OUT INTEGER, MWSTSATZ_OUT INTEGER, ABDATUM_OUT DATE, MWSTWERT_OUT DECIMAL(15,2)) AS BEGIN if (ABDATUM is NULL) then ABDATUM = CURRENT_DATE; for select S.MWSTSATZ from mwst S GROUP BY MWSTSATZ into :MWSTSATZ_OUT DO BEGIN for select first 1 M.ID, M.ABDATUM, M.MWSTWERT from mwst M where M.MWSTSATZ = :MWSTSATZ_OUT and M.ABDATUM <= :ABDATUM order by M.ABDATUM desc INTO :ID_OUT, :ABDATUM_OUT, :MWSTWERT_OUT DO SUSPEND; END END deine Variante 11 Reads meine Variante 8 Reads :-D [/krümelkackermodus] alex |
Re: Ersatz für DISTINCT ??
Zitat:
yep, Deine Methode ist hier schneller Gruß Thomas |
Re: Ersatz für DISTINCT ??
Hallo,
ich komme zwar etwas spät, aber vielleicht vereinfacht mein Verfahren doch einiges: Füge in die Tabelle ein Feld DATUM_BIS ein, z.B: Zitat:
SQL-Code:
Damit wird die Änderung der MWSt-Sätze etwas erschwert, aber auch das geht in einer Stored Procedure, wenn sie auch mit Fallunterscheidungen arbeiten muss (neuer MWSt-Satz z.B. für Luxuswaren, Änderung des Geltungsbereichs). Wenn das gewünscht wird, kann ich meine Lösung mitliefern.
CREATE PROCEDURE ERMITTLE_ALLEMWSTSP ( ABDATUM DATE)
RETURNS ( ID_OUT INTEGER, MWSTSATZ_OUT INTEGER, ABDATUM_OUT DATE, MWSTWERT_OUT DECIMAL(15,2)) AS begin FOR SELECT ID,MWSTSATZ,ABDATUM, MWSTWERT FROM MWST WHERE :ABDATUM BETWEEN ABDATUM AND DATUM_BIS ORDER BY MWSTSATZ INTO :ID_OUT,:MWSTSATZ_OUT,:ABDATUM_OUT,:MWSTWERT_OUT DO SUSPEND; end^ Übrigens scheint es mir einfacher zu sein, den MWSt-Satz als integer = Promille zu verwenden. Aber das ist sekundär (vielleicht gibt es aber auch MWSt-Sätze wie 7,25% - dann geht das natürlich nicht). Jürgen |
Re: Ersatz für DISTINCT ??
Warum eigentlich nicht so?
Oder kann FB keine verschachtelten SELECTS?
SQL-Code:
cu
SELECT ID,MWSTSATZ,ABDATUM, MWSTWERT FROM MWST AS m WHERE ABDATUM IN (SELECT MAX(ABDATUM) FROM mwst n WHERE n.MWSTSATZ=m.MWSTSATZ AND n.ABDATUM<=:ABDATUM)
ORDER BY MWSTSATZ INTO :ID_OUT,:MWSTSATZ_OUT,:ABDATUM_OUT,:MWSTWERT_OUT DO Oliver |
Re: Ersatz für DISTINCT ??
Thx, Leute. Konnte erst jetzt wieder etwas genauer hier gucken und weiter machen. Die Alex Prozedur scheint zu gehen. Zumindest mit diesen Testdaten :
SQL-Code:
Das soll jetzt aber nicht heißen, daß die anderen nicht gehen ! Die einzige, die definitiv nicht richtig war, das ist die von mir. :mrgreen:
CREATE TABLE MWST (
ID INTEGER NOT NULL, MWSTSATZ SMALLINT DEFAULT 0 NOT NULL, ABDATUM DATE, MWSTWERT DECIMAL(15,2) ); INSERT INTO MWST (ID, MWSTSATZ, ABDATUM, MWSTWERT) VALUES (1, 2, '1998-04-01'); INSERT INTO MWST (ID, MWSTSATZ, ABDATUM, MWSTWERT) VALUES (2, 1, '1980-01-01'); INSERT INTO MWST (ID, MWSTSATZ, ABDATUM, MWSTWERT) VALUES (3, 2, '2007-01-01'); INSERT INTO MWST (ID, MWSTSATZ, ABDATUM, MWSTWERT) VALUES (4, 0, '1900-01-01'); INSERT INTO MWST (ID, MWSTSATZ, ABDATUM, MWSTWERT) VALUES (5, 2, '1990-01-01'); INSERT INTO MWST (ID, MWSTSATZ, ABDATUM, MWSTWERT) VALUES (6, 1, '1970-01-01'); INSERT INTO MWST (ID, MWSTSATZ, ABDATUM, MWSTWERT) VALUES (7, 2, '1970-01-01'); INSERT INTO MWST (ID, MWSTSATZ, ABDATUM, MWSTWERT) VALUES (8, 2, '1980-01-01'); COMMIT WORK; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 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 by Thomas Breitkreuz