Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Komplexe Datenbankabfrage inkl. Export in CSV-File

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von moppi83, 2 Februar 2021.

  1. moppi83

    moppi83 Neuer Benutzer

    Hallo,

    ich muss zur täglichen Analyse Logfiles in Form von CSV-Dateien aus einer Datenbank erstellen.

    Das funktioniert soweit auch wie gewünscht.

    Code:
    SET @effectiveFileName = CONCAT('C:/temp/', 'log','_', DATE_FORMAT(NOW(), '%Y-%m-%d'), '.csv');
    SET SESSION group_concat_max_len = 100000;
    SET @queryStr = (
        SELECT
        CONCAT('SELECT * INTO OUTFILE \'',
            @effectiveFileName,
            '\' FIELDS TERMINATED BY \',\' ENCLOSED BY \'"\' LINES TERMINATED BY \'\r\n\' FROM (SELECT ',
            GROUP_CONCAT(CONCAT('\'', COLUMN_NAME, '\'')),
            'UNION ALL SELECT * FROM database.log WHERE DATE(database.log.StartTime) = \'',
            CURDATE(),
            '\') as tmp')
            FROM
                INFORMATION_SCHEMA.COLUMNS
            WHERE
                TABLE_NAME = 'log' AND
                TABLE_SCHEMA = 'database'
            ORDER BY ORDINAL_POSITION
        );
    PREPARE stmt FROM @queryStr;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;


    Die Abfrage erzeugt ein jeden Tag ein CSV-File inkl. Datum im Dateinamen mit den entsprechenden Einträgen.
    Nun muss eine weitere Spalte hinzugefügt werden, nämlich die Differenz aus zwei Zeiten (StartTime und EndTime sind jeweils DATETIME-Einträge in der Tabelle):

    Code:
    SELECT TIME_TO_SEC(TIMEDIFF((SELECT StartTime FROM log ORDER BY ID DESC Limit 0,1) , (SELECT EndTime FROM log ORDER BY ID DESC Limit 1,1))) AS IdleToLast' 

    Wie verknüpfe ich das mit der bestehenden Abfrage? Ich habe es mit UNIONS profbiert (SELECT * UNION SELECT TIME_TO_SEC(...) versucht, das klappt leider alles nicht.

    Viele Dank im Vorraus... .

    Moppi
     
  2. dabadepdu

    dabadepdu Datenbank-Guru

    Dafür verwendet man sogenannte Window Functions, z.B. lead oder lag.
    Ob die in der von Dir verwendeten mySQL Version schon drin sind? Hast Du "schon" Version 8?
    Sonst wird das so nichts und Du musst einen Workaround anwenden.
     
  3. moppi83

    moppi83 Neuer Benutzer

    Hallo,

    danke zunächst für den Hinweis. Ich Nutze MariaDB > 10.2, müsste also funktionieren.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden