2012-09-12 5 views
0

가능한 한 최선의 방법을 설명하려고합니다.Oracle SQL : 값 목록의 첫 번째 날짜 선택

나는 사건의 첫 문자를 보낸 날짜를 요구해야한다.

Case  | Letter_Sent_Date 
1234  | 05/29/2012 
1234  | 05/30/2012 
1234  | 06/01/2012 

아래의 'WHERE'조건을 사용하면 보고서에이 사례가 나타나지 않는 오라클 SQL을 어떻게 만들 수 있습니까? 보낸 첫 번째 편지 6 월에 없었기 때문에

WHERE Letter_Sent_Date between '01JUN2012' and '30JUN2012' 

, 나는이 보고서에 표시 나는 5 월 보고서를 실행하는 경우에만 표시하지 않습니다.

+1

뭘 6 월의 보고서 대 5 월 보고서에 표시 하시겠습니까? 5 월의 첫 번째 편지와 6 월의 첫 번째 편지는 없습니까? –

답변

1

첫 번째 문자를 하나의 쿼리에서 가져온 다음 그 위에 날짜를 기준으로 필터링 할 위치를 쓸 수 있습니다.

케이스와 첫 글자를 얻으려면 ...

select case_id, 
     letter_sent_date 
    from (
    select case_id, 
      letter_sent_date, 
      rank() over (partition by case_id order by letter_sent_date asc) rnk 
     from case_table 
     ) 
    where rnk = 1 

첫 글자를 지정한 날짜에 전송 된 유일한 사례를 얻으려면 ...

select case_id, 
     letter_sent_date 
from (
    select case_id, 
      letter_sent_date, 
      rank() over (partition by case_id order by letter_sent_date asc) rnk 
     from case_table 
    ) 
where rnk = 1 
    and letter_sent_date between to_date('01-JUN-2012','DD-MON-YYYY) 
          and to_date('30-JUN-2012','DD-MON-YYYY') 
0

난 경우

 
select case, letter_sent_date {, and any other fields you want from the table} 
from table_name 
where letter_sent_date between '01-jun-2012' and '30-jun-2012' 

이를 출력 할 것이다

: 당신이 찾고있는 것을 이해
 
case | letter_date_sent 
1234 | 06/01/2012 

이 당신을 위해 무엇을 찾고있는없는 경우, 귀하의 요청 :

+0

답장을 보내 주셔서 감사합니다! 내가 필요로하는 것은 첫 번째 Letter_Date_Sent를 대문자로 채우는 것입니다. letter_date_sent에 여러 달 동안 여러 값이있는 경우이 사례가 다음 달에 채워지 길 바라지 않습니다. 문제는 'WHERE'문에서 'letter_sent_date'를 기준으로보고 기간을 지정할 때 발생합니다. 해당 월에 'letter_date_sent'값이있는 경우에만보고하므로 각보고 월에 대해 해당 사례를 채 웁니다. 첫 번째 편지가 발송 된 달에 해당 케이스가 표시되기를 기대하고 있습니다. 감사! –

2

나는이에 대한 MIN 창/분석 기능을 사용 명확히하십시오

select case_id, letter_sent_date 
from (select case_id, letter_sent_date, 
      min(letter_sent_date) over (partition by case_id) as mindate 
     from t 
    ) t 
where mindate between '01JUN2012' and '30JUN2012' 

이 모든 경우를 제거를 첫 번째 편지가 발송되었을 때를 기준으로합니다. 행을 없애고 싶다면 아리 스톰이 대답했다.

+0

+1. 이는 순위와 같은 다른 분석 함수보다 더 적합합니다. –

+0

@ RajeshChamarthi,'rank()'의 문제점이자 이점은 사용하기가 더 어렵다는 것입니다. 차이점은 PK를 사용할 때 정답을 알면 _ 항상 알 수 있다는 것입니다. – Ben

+0

이 맞습니다. 그러나 대부분의 경우 행의 나머지 열을 선택해야합니다. (위의 경우 letter_subject와 address를 가져와야한다고 가정 해보십시오). 이 경우 rank/row_number가 아마도 선택 사항 일 것입니다. –

0

또는 오래된 학교 그룹/갖는

SELECT case_id, MIN(letter_sent_date) 
    FROM case_table 
    GROUP BY case_id 
HAVING MIN(letter_sent_date) BETWEEN '01-JUN-2012' and '30-JUN-2012' 
관련 문제