2012-05-22 2 views
2

환율이있는 날짜 별 기록이 여러 개인 환율 테이블이 있습니다. 어떤 날짜를 통과하면서, 내가 20/05/2012를 통과하면 다음 반환해야합니다 (5) 평가처럼지정된 날짜 이전에 최신 값을 찾으십시오.

Date   Rate 
17/05/2012  5 
23/05/2012  6 
27/05/2012  7 

는 지금은 속도를 원하는 때문에 20/05/2012 날짜 범위 17 경과 23 2012 년 5 월

+2

시동기의 데이터 유형은 무엇입니까? – gbn

+0

모호하지 않은 날짜 형식을 사용하십시오. SQL Server의 경우 가장 안전한 것은'YYYYMMDD'입니다. –

답변

3

당신이 올바른 데이터 유형은 한 가정이 같은

SELECT TOP 1 
    Rate 
FROM 
    MyTable 
WHERE 
    DateColumn <= '20120520' 
ORDER BY 
    DateColumn DESC 
+0

'16/5/2012 ', 4와 같이 샘플 데이터에 레코드가 하나 더 존재하면 쿼리 대신 5가 아닌 4가 반환됩니까? –

+0

@ChrisGessler : "TOP 1"을 사용하여 20120520 이전에 유일한 최신 행을 가져옵니다. "최신"은 DateColumn – gbn

+0

의 내림차순으로 정의됩니다. 상위 1 desc, 작동해야 –

1

뭔가 작동합니다 (즉, ... 저장 날짜 값에 VARCHAR되지 않음) :

select Rate from tablename where Date in (
    select max(Date) as Date 
    from tablename 
    where Date <= convert(datetime, '20/05/2012', 103) 
) 
+0

날짜 형식으로 인해 실패 ... – gbn

+0

@ gbn 정정! 그래서 당신의 솔루션도 실패 할 것입니다. –

+0

@AaronBertrand : 좋은 생각이 아닙니다. 내가 틀렸어. 너무 성급한 – gbn