如何删除中断查询的行?

问题描述

我有一张下表。数据之间没有周期性,所以我无法使用row_number()或rank之类的功能。

**Column1**  |  **Column2**  |  **Timestamp**
Station1     |  Data1        | Date1    
Station1     |  Data2        | Date2
Station1     |  Data1        | Date3
Station1     |  Data2        | Date4
Station1     |  **Data3**    | Date5
Station1     |  Data2        | Date6
Station2     |  Data1        | Date7
Station2     |  Data2        | Date8
Station2     |  **Data3**    | Date9
Station2     |  Data2        | Date10

column2中的普通数据类似于Data1和Data2,但是当将Data3插入column2时,它打破了Data1和Data2之间的周期性。我不想从Data3之后看到查询中的数据检索。我希望它像下面一样。

**Column1**  |  **Column2**  |  **Timestamp**
Station1     |  Data1        | Date1    
Station1     |  Data2        | Date2
Station1     |  Data1        | Date3
Station1     |  Data2        | Date4
Station2     |  Data1        | Date7
Station2     |  Data2        | Date8

我要怎么做才能达到这个结果?预先感谢。

解决方法

您似乎仅在下一行是“ data2”时才需要“ data1”,而仅在上一行是“ data1”时才需要“ data2”。所以:

select t.*
from (select t.*,lag(column2) over (partition by column1 order by timestamp) as prev_column2,lead(column2) over (partition by column1 order by timestamp) as next_column2
      from t
     ) t
where (column2 = 'data1' and next_column2 = 'data2') or
      (column2 = 'data1' and prev_column2 = 'data1')
,

您只想显示Data1和Data2行,但只显示前一个这样的行是其他数据的行。换句话说,您要显示交替的Data1和Data2行。这可以通过select column1,column2,timestmp from ( select column1,timestmp,last_value(case when column2 in ('Data1','Data2') then column2 end ignore nulls) over (order by timestmp rows between unbounded preceding and 1 preceding) as last_col2 from mytable ) where column2 in ('Data1','Data2') and decode(column2,last_col2,'same','different') = 'different' order by timestmp; 来实现:

LAG

演示:https://dbfiddle.uk/?rdbms=oracle_18&fiddle=c8611e24eb0d54ba65e89391d11332cd

(但是,如果可以肯定,总是有Data3行加上要删除的下一行,那么可以改用column2 = '**Data3**' or lag(column2) = '**Data3**'并丢弃const reset = () => (state) => []; const add = (newValue) => (state) => [...state,newValue]; const overwrite = (newState) => (state) => newState; const reset$ = new Subject(); const add$ = new Subject(); const data$ = this._data.asObservable() ... const data = merge( reset$.pipe(map(reset)),add$.pipe(map(add)),data$.pipe(map(overwrite)) ).pipe( scan((state,fn) => fn(state),[]) ); 处的所有行。)>

,

简化格式:

SQLFiddle

SELECT X.column1,x.column2,x.timestamp FROM 
(
SELECT A.*,LEAD(COLUMN2) OVER(ORDER BY COLUMN1,column2) NEXT_VALUE
FROM TABLE1 A
) X WHERE 'Data3' not IN (COLUMN2,NEXT_VALUE) 
ORDER BY 1,2;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...