2012-12-05 4 views
1

내 데이터베이스는 ID로 식별되는 많은 개인에 대해 한 달에 한 번씩 항목으로 구성됩니다. 날짜는 YEAR 및 WEEK 필드에 저장됩니다. BINARY_FLAG라는 이진 플래그가 있습니다. 바이너리 플래그가 설정된 특정 연도의 각 개인에 대해 지난 주를 포착하고 싶습니다. 경우, 개인의 많은 여러 항목이있을 것, 바이너리 플래그가 단 1 곳각 개인의 마지막 항목을 제외한 모든 항목을 삭제하십시오.

select ID, year, week, binary_flag 
from my_table 
where year = 2000 and 
binary_flag = 1 

이 2000 년에 대한 모든 항목을 반환합니다

내 코드는 다음과 같이 초기 데이터가 당겨 이진 플래그는 수주 동안 1이었다. 지난주를 제외하고는 어떻게 모두 제거합니까?

답변

1
select * from my_table t1 
join 
(select ID, year, max(week) maxWeek 
from my_table 
where year = 2000 and 
binary_flag = 1 
group by Id,year) t2 
on 
(t1.Id=t2.id) and (t1.year=t2.year) and (t1.week=t2.maxWeek) 
관련 문제