Komplexe Datenbankabfrage inkl. Export in CSV-File

moppi83

Neuer Benutzer
Beiträge
4
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
 
Werbung:
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.
 
Werbung:
Zurück
Oben