2013-04-22 3 views
5

BusinessDataDate에서 구성한 데이터를 보유하는 SQL Server 테이블이 있습니다. BusinessDataDate는 날짜 만 (시간 구성 요소가 없음)이며 영업일에만 채워집니다. 예 : 주말이나 공휴일은 허용되지 않습니다.SQL에서 "다음이지만 최신"날짜를 찾는 가장 좋은 방법은 무엇입니까?

특정 순서는이에 없기 때문에, 나는이 쿼리가 작동 date before the current max date

를 찾으려면, 나는 지역 변수에 값을 설정할 수 있습니다 -하지만 청소기 방법이있을 것처럼 느낌?

SELECT MAX(BusinessDataDate) FROM myTable 
    WHERE BusinessDataDate < (SELECT MAX(BusinessDataDate) FROM myTable) 

각 날짜에는 테이블에 여러 행이 있습니다. 정확한 숫자는 예측할 수 없습니다.

+2

귀하의 접근 방법은 문제가 없습니다. 마지막 x 일만 필터링하기 위해 기본 및 하위 쿼리에 where 절을 추가하면 성능이 향상 될 수 있습니다. –

+0

나는 그것을 시도 할지도 모르지만 ... 중동에서 일하는 것은 조금 모호하다. Eid는 3-6 일이 될 수 있으며 주말과 일치하는 경우 정서적으로 10 일 범위를 가질 수 있습니다. – BlueChippy

답변

2

원래 검색어와 비슷하지만 최상위 1을 사용하는 방법은 어떻게됩니까?

SELECT Top 1 BusinessDataDate 
FROM myTable 
WHERE BusinessDataDate < (SELECT MAX(BusinessDataDate) FROM myTable) 
ORDER BY BusinessDataDate DESC 
+0

외부 쿼리 –

+0

에 ORDER BY가 필요합니다. 수정 됨. – Ric

+0

더 나은 점은 무엇입니까? 이 작업에는 정렬이 필요하며 원본 쿼리는 수행되지 않습니다. – Aryadev

3
SELECT TOP (1) 
    BusinessDataDate 
FROM 
    (
    SELECT 
     BusinessDataDate, 
     DENSE_RANK() OVER (ORDER BY BusinessDataDate DESC) as rn 
    FROM 
     myTable 
    ) x 
WHERE 
    x.rn = 2 
ORDER BY 
    x.BusinessDataDate; 
+0

열 이름 'x'이 잘못되었습니다. – BlueChippy

+0

테이블에 여러 개의 행이 있습니다. 행의 정확한 수는 날짜마다 다릅니다. – BlueChippy

+0

@BlueChippy : 그때 구체적으로, downvote하지 마십시오. ** ** 우리가 ** – gbn

관련 문제