2017-06-27 1 views
0

datasetWie Bereinigung Datensätze, die nicht

Ich will mein Datensatz Bereinigung geändert haben. Auf der linken Seite würden die Rohdaten aussehen. Die Temperaturwerte basieren auf der Zeit. Ich will im Grunde die Zeile zu löschen, wenn die Zeile darüber die gleiche Temperatur hat

+1

Markieren Sie Ihre Frage mit der Datenbank, die Sie verwenden. Versuchen Sie auch, die Logik für Ihre Ausgabe zu erklären. –

Antwort

0

Wenn Sie nur Änderungen möchten, verwenden Sie den ANSI-Standard lag() Funktion, die von den meisten Datenbanken unterstützt:

select zone, temperature, time 
from (select t.*, 
      lag(temperature) over (partition by zone order by time) as prev_temperature 
     from t 
    ) t 
where prev_temperature is null or prev_temperature <> temperature; 
0

Sie verwenden lead, um die Werte der nächsten Zeile abzurufen und die Zeilen zu löschen, wenn der Wert der nächsten Zeile gleich ist.

with cte as (select t.* 
      ,lead(temperature) over(partition by zone order by time) as next_temp 
      from tbl t 
      ) 
delete from cte 
where next_temp is not null and next_temp=temperature