Hallo,
ich habe eine Tabelle in der ich für mehrere Rechner (VMs) die Speicherplatzinfo speichere.
id,time,hostname,mountpoint,free,usage
nun frage ich die Tabelle ab und gruppiere nach hostname und mountpoint, und wende die Aggregat-funktion Max auf time an, um in jeder Gruppe den aktuellsten Wert abzufragen.
nun benötige ich aber zusätzlich den vorletzten Eintrag (Vergleichswert und für ein kommendes email-flag), wie stelle ich das am sinnvollsten an?
Ich dachte ich kann das in einem Subselect suchen (die id) und dann via left join reinlinken. Hat aber leider den nachteil, dass erst die komplette Tabelle in eine Temptable geschrieben wird (nicht gruppiert) und dann erst weiterverarbeitet wird...ein Performance-Supergau
Vielleicht habt ihr eine Idee
Gruß Frank
ich habe eine Tabelle in der ich für mehrere Rechner (VMs) die Speicherplatzinfo speichere.
id,time,hostname,mountpoint,free,usage
nun frage ich die Tabelle ab und gruppiere nach hostname und mountpoint, und wende die Aggregat-funktion Max auf time an, um in jeder Gruppe den aktuellsten Wert abzufragen.
Code:
select max(created),hostname,mountpoint,free,`usage` from diskfree group by hostname,mountpoint
Ich dachte ich kann das in einem Subselect suchen (die id) und dann via left join reinlinken. Hat aber leider den nachteil, dass erst die komplette Tabelle in eine Temptable geschrieben wird (nicht gruppiert) und dann erst weiterverarbeitet wird...ein Performance-Supergau
Vielleicht habt ihr eine Idee
Gruß Frank
Kommentar