如何解决如何删除中断查询的行?
我有一张下表。数据之间没有周期性,所以我无法使用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),[])
);
处的所有行。)>
简化格式:
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。