![]() |
Datenbank: MySQL • Version: 5.6 • Zugriff über: UniDAC
Datensätze löschen, dass die 100 neuesten übrig bleiben
Hi,
ich habe eine Tabelle bestehend aus einer ID, einem Timestamp und einigen Statistikzählern. In dieser sollen aber immer nur eine maximale Anzahl an Daten bestehen bleiben (z.B. 100). Jetzt könnte ich zwar in Delphi die Anzahl der Datensätze abfrage und sooft den ersten löschen, bis die gewünschte Anzahl in der Tabelle vorhanden ist. Gibt es da vielleicht über SQL eine elegantere Lösung? |
AW: Datensätze löschen, dass die 100 neuesten übrig bleiben
Ein OnInsert Trigger vielleicht?
Sherlock |
AW: Datensätze löschen, dass die 100 neuesten übrig bleiben
Das wäre eine Möglichkeit.
Wenn es irgendwie geht, würde ich das aber gerne über eine simples SQL-Statement lösen. |
AW: Datensätze löschen, dass die 100 neuesten übrig bleiben
Hallo,
ein Trigger ist simples SQL, was halt nur automatisch angeworfen wird. In etwa so: Delete From Table1 T1 Where T1.Id Not In (Select First 100 T2.Id From Table1 T2 Order by T2.TimeStamp Desc) Wobei das SubSelect mir nicht so gefällt. |
AW: Datensätze löschen, dass die 100 neuesten übrig bleiben
SQL-Code:
delete
from <Tabelle> where id in ( select id from table <Tabelle> t1 minus select id from table <Tabelle> t2 limit 100 desc ); |
AW: Datensätze löschen, dass die 100 neuesten übrig bleiben
Zitat:
Zitat:
Zitat:
|
AW: Datensätze löschen, dass die 100 neuesten übrig bleiben
Zitat:
|
AW: Datensätze löschen, dass die 100 neuesten übrig bleiben
Eine Möglichkeit wäre
SQL-Code:
CREATE TABLE Table1
(`id` int not null auto_increment, `date` date, `data` varchar(6), primary key(id)) ; INSERT INTO Table1 (`date`, `data`) VALUES ('2018-01-01', '"test"'), ('2018-01-02', '"test"'), ('2018-01-03', '"test"'), ('2018-01-04', '"test"'), ('2018-01-05', '"test"') ; create temporary table latest SELECT id from Table1 order by date desc limit 2; delete from Table1 where id not in ( select id from latest ); drop table latest; ![]() |
AW: Datensätze löschen, dass die 100 neuesten übrig bleiben
Hm...das ist jetzt aber blöd
Code:
Ich muss mich etwas korrigieren. Ist kein MySQL 5.6 sondern MySQL 8.0.12
Error Code: 1235. This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
|
AW: Datensätze löschen, dass die 100 neuesten übrig bleiben
@mkinzler
:thumb: falls jemand noch nachlesen will: ![]() Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz