2016-09-07 3 views
0

여기 MS-SQL2012. 나는 데이터베이스에서 최신 환율을 얻는 임무를 맡았습니다. 조인을 수행하거나 창 함수를 사용하는 것과 같은 여러 가지 방법이 있다는 것을 알고 있지만 제대로 작동하려면 문제가있는 것 같습니다.최신 환율을 움켜 잡으십시오

원래의 작업은 아래에 표시되어 있습니다.

주어진 가장 최근의 가능한 환율 다음 필수 매개 변수를 반환

쓰기 SQL 절차 :

  • 소스 통화 [SRCCURRENCY]

  • 대상 통화 [CURRENCY1]

  • 날짜 [을 참고 문헌]

  • 비율 [RATE1]

DCURRENCY 데이터베이스.

절차에서 시스템에서 삭제 된 요율이 포함되어서는 안되며 요율이 절차 매개 변수로 전달 된 날짜에없는 경우 해당 날짜 이전의 가장 최근 사용 가능 요율이 반환되어야합니다.

나는 조인과 윈도우 절차를 쓰려고 노력했지만, 실수로 끝났다. 다음은 아래에 표시됩니다.

내 이해를 돕기 위해 누군가가 어떤 방법으로이를 수행 할 수 있는지, 그리고 그 이유를 말할 수 있다면 좋을 것입니다.

SELECT 
    CURRENCY1 
    ,SRCCURRENCY 
    ,REFERENCEDATE 
, RATE1 

SELECT RANK() 
OVER (PARTITION BY SRCCURRENCY ORDER BY CURRENCY1 DESC) AS N 

FROM [DCURRENCY] 

및 조인을 통해;

SELECT [CURRENCY1] 
    ,[SRCCURRENCY] 
    ,[REFERENCEDATE] 
    ,[RATE1] 
    FROM [DCURRENCY] 
    INNER JOIN (SELECT [CURRENCY1], MAX(REFERENCEDATE) AS [REFERENCEDATE] 
    FROM SRCCURRENCY 
    ORDER BY REFERENCEDATE DESC 

나는 최고 결과를 잡아서 전에 다른 DB를의에서이 작업을 수행했지만 여기 스키마의 부족은 나를 위해 훨씬 더 어려운 작업을하고 있습니다.

답변

0

검색어가 구문 상 올바르지 않습니다. 그러나 이것에 대한 일반적인 사고 방식은 다음과 같습니다. 가장 최근 날짜의 통화 쌍을 찾고 있습니다.

이 문제를 해결하는 일반적인 방법은 row_number()을 사용하며 다음과 같습니다 다른 방법이 있습니다

select d.* 
from (select d.*, 
      row_number() over (partition by srccurrency, destcurrency order by referencedate desc) as seqnum 
     from dcurrency d 
    ) d 
where seqnum = 1; 

, 그러나 이것은 첫 번째 쿼리를 시도했던 것 같습니다. 그러나 당신은 질의와 통화에서 통화 쌍의 역할에 대해 혼란스러워합니다.

관련 문제