2016-06-15 2 views
0

쿼리 및 데이터베이스에는별로 좋지 않습니다. 나는오라클은 한 달 동안 마지막 날짜를 얻습니다.

Date  ID Value 
20160601 1 300 
20160607 1 301 
20160601 2 600 
20160607 2 601 
20160501 1 250 
20160507 1 240 
20160501 2 800 
20160507 2 801 

내 요구 사항은 각 ID에 대한 해당 월의 마지막 날짜를 선택하고 값을 표시하는 것입니다 다음과 같은 데이터 테이블이 있습니다. 예를 들어, 내가 선택하는 경우 월 (5) 결과는 다음과 같습니다 사용자가 입력 할 월을 기준으로

Date  ID Value 
20160507 1 240 
20160507 2 801 

등등.

나는 단순 해 보일지 모르지만 나는 정말로 붙어있어 도움이된다고 생각합니다. 감사.

select date, id, value 
    from (select date, id, value, 
       row_number() over (partition by id order by date desc) as rn 
      from tbl 
     where extract(month from date) = 5) 
where rn = 1 

: date 가정

+1

모든 ID는 항상 모든 날짜에 존재합니다. ID 1과 ID 2는 한 달 내에 최대 날짜가 다를 수 있습니까? 그들이하는 경우 어떻게해야합니까? –

답변

0

최대 날짜를 찾은 다음 해당 날짜가있는 모든 행을 선택하십시오.

select * 
from table 
where date = (select max(date) from table where date like '201605%') 
+0

고맙습니다 !! 지금 작동 중 – ShB

2

는 (꼭 그래야되는 것처럼), 여러분은 월 값을 비교하는 extract을 사용할 수 있으며, 다음 row_number() over ... 분석 함수가 id 값에 따라 최신 행을 얻기 위해 실제 날짜 열입니다 물론 date은 예약어이므로 실제 날짜 열이 다른 것으로 호출된다고 가정합니다.

+0

날짜 정보가있는 그대로 유감입니다. NUMBER. 그래서 당신의 쿼리를 시도한 후에 오류가 발생했습니다 – ShB

+0

당신이 받아 들인 대답에 따라, 그것도 숫자 중 하나처럼 보이지 않습니다 :) – sstan

관련 문제