2017-01-19 1 views
0

Ich habe eine Tabelle mit zwei Spalten.SQL-Paare zu löschen, wenn eine Zeile ist älter als eine bestimmte Zeitmarke

match_id varchar2(30) 
timestamp 

match_id ist im Format von Ganzzahl [A | B], wie 1234.A, 1234.B, 1235.A oder 1235.B. Zeilen mit match_id auf derselben Ganzzahl werden als Paar bezeichnet, also ist 1234.A und 1234.B ein Paar, während 1235.A und 1235.B ein anderes Paar ist.

Die Anforderung besteht darin, alle Paare zu löschen, wenn eine Zeile in diesem Paar älter als ein bestimmter Zeitstempel ist. Datenbank ist Oracle 11.2 oder höher.

Ich bin nicht gut in SQL, so dass jede Hilfe geschätzt wird.

Antwort

0

Bitte nehmen Sie sich einen Blick auf den folgenden ...

create table test_1 

( match_id varchar2 (30), ts Zeitstempel );

insert into test_1 values ('1234.A',current_timestamp-10); 
insert into test_1 values ('1234.B',current_timestamp-20); 
insert into test_1 values ('1235.A',current_timestamp-30); 
insert into test_1 values ('1235.B',current_timestamp-40); 

Um den Inhalt der Tabelle zu erhalten.

select * from test_1; 

1234.A 09-JAN-17 08.55.24.000000000 AM
1234.B 30-DEC-16 08.56.02.000000000 AM
1235.A 20-DEC-16 08.56.02.000000000 AM
1235 .B 10-DEC-16 08.56.02.000000000 AM

Lösche alle Paare, deren Zeitstempel kleiner als "current_timestamp-30" ist.

delete test_1 where substr(match_id,1,instr(match_id,'.')-1) in (select substr(match_id,1,instr(match_id,'.')-1) from test_1 where ts < current_timestamp-30); 

select * from test_1; 

1234.A 09-JAN-17 08.55.24.000000000 AM
1234.B 30-DEC-16 08.56.02.000000000 AM

0

Kein ideales Datenmodell! Zwei Informationsbits, der Integer und der (A | B) Teil, werden in einer Spalte gespeichert!

ich die Lösung unter nicht testen kann (keine Testdaten zur Verfügung gestellt), aber so etwas wie dies funktionieren soll:

delete from your_table_name 
where substr(match_id, 1, instr(match_id, '.')) 
     in (
       select substr(match_id, 1, instr(match_id, '.')) 
       from your_table_name 
       where timestamp_column <= :input_timestamp_value 
      ) 
; 
Verwandte Themen