create table events (
event_type integer not null,
value integer not null,
time timestamp not null,
unique(event_type, time)
);
두 번 이상 등록된 각 event_type 에 대해 최신(즉, 시간 측면에서 가장 최근 )과
두 번째 최신 값 간의 차이를 반환 하는 SQL 쿼리를 작성합니다 . 테이블은 event_type (오름차순)으로 정렬되어야 합니다 .
예를 들어 다음 데이터가 주어졌을 때:
value = 2 value = 7 = -5
value =20 value=16= 4
event_type | value | time
------------+------------+--------------------
2 | 5 | 2015-05-09 12:42:00
2 | 2 | 2015-05-09 14:48:30
2 | 7 | 2015-05-09 12:54:39
3 | 16 | 2015-05-09 13:19:57
3 | 20 | 2015-05-09 15:01:09
4 | -42 | 2015-05-09 13:19:57
쿼리는 다음 행 집합을 반환해야 합니다.
event_type | value
------------+-----------
2 | -5
3 | 4
들어 EVENT_TYPE 2 최신 값은 2이고, 상기 제 최신의 값은 그들 사이의 차이가 있으므로, 7 -5.
행 집합의 열 이름은 중요하지 않지만 순서는 중요합니다.
이 문제 답이 뭘까요?
SELECT event_type, value - next FROM (SELECT *, LEAD(value) OVER(PARTITION BY event_type ORDER BY time DESC) AS next FROM (SELECT * FROM (SELECT ROW_NUMBER() OVER (PARTITON BY event_type ORDER BY time DESC) AS rownum, * FROM events) #events WHERE #events.rownum < 3) temp ) temp2 WHERE temp2.next IS NOT NULL