Also, nachdem ich nicht weiss, welche Datenbank du nutzt, kann ich dir da nicht 100% ein Beispiel geben.
Aber hier mal was aus Postgres:
CREATE TABLE daten (
id serial,
feld1 varchar NOT NULL,
feld2 integer NOT NULL,
changed timestamp DEFAULT 'now()' NOT NULL
So, damit hast du mal eine Tabelle mit ner fortlaufenden ID, 2 Feldern fuer Daten und das besagte Feld mit dem Zeitstempel.
Wenn du nun so Daten einfuegst, dann wird der Zeitstempel immer auf den Zeitpunkt des Einfuegens gesetzt:
INSERT INTO daten (feld1,feld2) VALUES('blafaselblubber',1234);
Du willst ja aber vorher pruefen, ob es schon den gleichen Datensatz, der innerhalb der letzten 30 Minuten eingetragen wurde gibt. Also pruefst du das vor dem INSERT:
SELECT id FROM daten WHERE feld1='blafaselblubber' AND feld2=1234 AND changed > now() - interval '30 minutes';
Wenn dieser SELECT was zurueckliefert, dann brauchst du den Datensatz nicht einfuegen, da er innerhalb der letzten 30 Minuten schon einmal eingefuegt wurde. Eventuell musst du das fuer deine Datenbank von der SQL-Syntax her etwas anpassen.
Also, nochmal zusammengepackt:
unless ( $dbh->selectrow_array(qq{SELECT ... FROM ... WHERE ... AND changed > now() - interveral '30 minutes'})) {
$dbh->do(qq{INSERT INTO ... (...) VALUES(...);
}