sql 코딩 테스트 0 1 1,185

by 준일정 [2021.10.15 19:39:19]


 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.

행 집합의 열 이름은 중요하지 않지만 순서는 중요합니다.

 

이 문제 답이 뭘까요?

by 미소천재 [2023.02.08 18:55:23]
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
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입