만든
create table events (
event_type integer not null,
value integer not null,
time timestamp not null,
unique (event_type, time)
);
그림의 데이터가 주어지면 두 번 이상 등록 된 각 event_type에 대해 최신 값과 두 번째 최신 값의 차이를 반환하는 쿼리를 작성하고 싶습니다.
위의 데이터가 주어지면 출력은 다음과 같아야합니다.
event_type value
2 -5
3 4
다음을 사용하여 해결했습니다.
CREATE VIEW [max_date] AS
SELECT event_type, max(time) as time, value
FROM events
group by event_type
having count(event_type) >1
order by time desc;
select event_type, value
from
(
select event_type, value, max(time)
from(
Select E1.event_type, ([max_date].value - E1.value) as value, E1.time
From events E1, [max_date]
Where [max_date].event_type = E1.event_type
and [max_date].time > E1.time
)
group by event_type
)
그러나 이것은 매우 복잡한 쿼리처럼 보이며 더 쉬운 방법이 있는지 궁금합니다.
창 기능 사용 :
select e.*,
(value - prev_value)
from (select e.*,
lag(value) over (partition by event_type order by time) as prev_value,
row_number() over (partition by event_type order by time desc) as seqnum
from events e
) e
where seqnum = 1 and prev_value is not null;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다