2017-04-20 8 views
0

다음 그림과 같은 테이블이 있습니다. 표 4 열각 센서 및 이벤트 유형 (sensor_id, event_type)에 대한 시간 기준으로 가장 최근 값을 반환하는 SQL 쿼리

sensor_id, event_type, value, time 

enter image description here

문제가 (화상에 전술 한 바와 같이)은 가지고

는 SQL 쿼리를 작성을 각 센서 이벤트 타입 (sensor_id, EVENT_TYPE)의 경우, 가장 최근 값을 반환합니다 (시간 기준). 테이블은 sensor_id (오름차순), event_type (오름차순) 순으로 정렬해야합니다.

enter image description here

내가 O/P를 수신하기 위해이 쿼리를 사용하고 적합한 지 궁금 :

나는 다음과 같은 테이블을 반환해야하는 쿼리를 작성해야?

SELECT distinct sensor_id, event_type, value 
FROM events a 
inner join 
(
Select sensor_id, event_type, max(time) as recent_time 
from 
events 
group by sensor_id, event_type 
) b 
on a.time=b.recent_time and a.sensor_id=b.sensor_id and a.event_type=b.event_type 
ORDER BY sensor_id, event_type; 

는이 처음에만 SQL로 태그 된 :-)

+0

이 나에게 인터뷰 질문처럼 보인다. 그래서 그런 질문에 대한 답을 묻는 곳이 아닙니다. –

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557 및 허용 된 답변을 읽어보십시오. –

+0

어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? DB2? 파이어 버드? –

답변

0

올바른 쿼리입니다. 그러나 MySQL은 modern SQL을 지원하지 않으므로 OP에서는 사용할 수 없습니다.


쉽게 윈도우 함수를 사용하여 수행 할 수 있습니다 :

SELECT sensor_id, event_type, value 
FROM (
    select sensor_id, event_type, value , 
     row_number() over (partition by sensor_id, event_type order by time desc) as rn 
    from events 
) t 
where rn = 1 
order by sensor_id, event_type; 
+0

sensor_id와 event_type 유형의 조합에 대해 쿼리의 첫 번째 인스턴스에 대해 가장 최근 값부터 시작하는 모든 값을 갖게됩니다. 하지만 실제로 원하는 것은 모든 인스턴스 대신 sensor_id와 event_type의 조합에 대한 첫 번째 인스턴스에 해당하는 값입니다. 마찬가지로 sensor_id와 event_type의 다른 모든 조합에 대해서도 마찬가지입니다. 당신의 대답은 시간에 따라 가장 최근의 것으로 시작하는 모든 인스턴스를 가져옵니다. 그것이 틀린 이유입니다. –

2

도움이되기를 바랍니다, 그래서 대답은 표준 SQL을 사용 -이 :

SELECT sensor_id, event_type, value FROM events ORDER BY time DESC; 
+0

왜이 쿼리를 사용할 수 없습니까? 'SELECT sensor_id, event_type, value FROM events ORDER BY time DESC;'그것을 사용함으로써, 나는 o/p를 얻을 수 있지만 그것이 올바른 것인지 확실하지 않습니다. –