2017-11-18 15 views
0

패턴을 따르는 ID 번호로 연간 고유 라이센스를 얻으려고합니다. 나는 순위와 파티션을 사용하려했지만 일부 라이센스는 서로 다른 시작과 끝 날짜를 가지고 있기 때문에 최종 출력물을 얻는 데 어려움을 겪고있다. enter image description hereSQL 파티션 순위

+0

위의 예는 하나의 ID에 대한 것입니다. 나는 이것이 나에게 어렵다는 이유 인 1 백만이 넘는다. 감사 번호 –

+2

'패턴 다음에 오는 ID 번호로 .' 어떤 패턴? 좀 더 설명해 주시겠습니까? 이 테이블에 어떤 패턴도 보이지 않습니다. – krokodilko

+0

나는 다음 해에 자주 나타나는 면허증을 시험 중입니다. –

답변

0

이유는 지그재그 시작/종료 날짜는 중요합니까 : enter image description here

가 이상적으로, 내가 최종 출력이 원하는 : 데이터는 지금처럼 보인다? 만큼 당신이 기록, 당신은 같은 것을 할 수 속한 년 확인할 수 :

SELECT * 
FROM <Table_Name> 
QUALIFY RANK() OVER(PARTITION BY ID_Number, Year ORDER BY <Some_Expression>) = 1 

이것은 당신이 그러나 처리 후 할 수있는 각 (ID/년) 조합 당 파티션 (그룹)을 작성합니다 네가 원해. <Some_Expression>을 사용하여 행을 정렬하면 표시 할 데이터가있는 행이 맨 위에 정렬됩니다. RANK = 1은 그룹 당이 "맨 위"행만 리턴합니다.

찾고있는 라인을 따라 가야합니까?

+0

이 경우 불행히도 최종 결과가 표시되지 않습니다. –

0
select * 
from mytable 
qualify max(year) over (partiton by license)  -- example: 
     - min(year) over (partiton by license)  -- 2017 - 2015 = 2 
     = count(*) over (partiton by license) - 1 -- three rows -1 = 2 
    and count(*) over (partiton by license) > 1 

1 년 이상이며 연수가 연속됩니다.

+0

흠 ... 작동하지 않는 것 같습니다. 그 쿼리에서 결과를 얻지 못했습니다. 감사합니다. –

+0

물론 논리가 잘못되었습니다. 2015 년에서 2017 년까지 3 년이지만 2017-2015 년은 2 년입니다. 고쳤다. – dnoeth

+0

고맙습니다. 제 논리를 이해해야합니다. 그러나 2014에 대한 레코드가 없습니다.이 논리를 편집하여 2014 년에 대한 (임의 또는 첫 번째) 레코드를 얻는 방법이 있습니까? 나는 단지 2015-2017의 가치가있다. –