[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Da ist SQL tatsächlich etwas schwierig.
    In RPG/LE kann ich einfach mit SETLL/READE schnell zugreifen.
    Da SQL aber immer mehrere Sätze verarbeitet ist die Einschränkung nur auf die von dir beschriebene Weise möglich, auch wenn es da noch so komplex ist.

    select * from datei where feld = 'a' and Datum = (select max(Datum) from datei where feld = 'a' and Datum < year(current date)*10000 + month(current date)*100 + day(current date))
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    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),
         
    as (Select Max(MyNumDate) as MaxDateFeld1
                  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(80)   
           
    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' ... 
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. SQL Datum
    By steven_r in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 04-12-06, 13:16
  2. SQL: Aus mehreren Feldern ein Datum erkennen
    By I0N in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-11-06, 13:44
  3. SQL DATUM
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 20-11-06, 19:37
  4. Aktuelles Datum per SQL
    By jakarto in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 17-02-06, 18:37
  5. Datum in SQL
    By cbe in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 03-11-05, 10:11

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •