Hallo,
man kann das Ganze höchstens mit Common Table Expressions lesbarer machen:
Vielleicht so:
PHP-Code:
with x as (Select Year(Current_Date) * 10000 +
Month(Current_Date) * 100 +
Day(Current_Date) as TagesDatum
From SysIBM/SysDummy1),
y as (Select Max(MyNumDate) as MaxDate, Feld1
From MyTable cross join x
Where MyNumDate < TagesDatum and Feld1 = 'a' ...)
Select a.*
from MyTable a join y on MyNumDate = MaxDate
Where Feld1 = 'a' ....
Das Problem liegt darin, dass das Datum numerisch ist, und die Verarbeitung von numerischen Datumswerten mit SQL etwas komplizierter ist.
Um den Source-Code noch etwas einfacher zu machen, könnte man für die Ermittlung des numerischen Tagesdatum eine UDF (User Defined Function) schreiben und diese einbinden.
Beispiel:
PHP-Code:
CREATE FUNCTION MySchema/AktDatNum ( )
RETURNS DECIMAL(8, 0)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
CALLED ON NULL INPUT
NO EXTERNAL ACTION
DISALLOW PARALLEL
NOT FENCED
BEGIN
DECLARE CURDATE DATE ;
SET CURDATE = CURRENT_DATE ;
RETURN(YEAR(CURDATE) * 10000 + MONTH(CURDATE) * 100 + DAY(CURDATE ));
END ;
Damit kann man dann das SQL-Statement wie folgt vereinfachen
PHP-Code:
with y as (Select Max(MyNumDate) as MaxDate
From MyTable
Where MyNumDate < AktDatNum() and Feld1 = 'a' ....)
Select a.*
from MyTable a join y on MyNumDate = MaxDate
Where Feld1 = 'a' ...
Bookmarks