2017-03-15 8 views
1

Access에서 만들고 싶은이 쿼리로 누군가가 나를 도울 수 있기를 바랍니다. 세 개의 열과 하나의 값 열이있는 테이블이 있습니다. B2C/SI_01/INP01의 경우 여러 버전이있는 재무 데이터와 관련하여 타임 스탬프가 다른 4 가지 버전이 있습니다. 하위 쿼리를 사용하여 B2C/SI_01/INP01 조합의 "이전"타임 스탬프를 어떻게 쿼리 할 수 ​​있습니까? 나는 상위 n-2, 정렬 순서 내림차순 및 최대 시간 스탬프 좋아하지 않아 몇 번 시도했지만 올바른 SQL 얻을 것 같지 않습니다.SQL 하위 쿼리 액세스 - 마지막 하나 이전

enter image description here

지금까지 내 코드는 다음과 같습니다 사전에

SELECT [N-1], SI_Initiative, LineCode, Timestamp 
FROM TBL_VC_DATA t1 
WHERE t1.Timestamp = 
    (SELECT Max(t2.Timestamp) 
    FROM TBL_VC_DATA t2 
    WHERE t2.timestamp<>t1.timestamp 
    AND t2.[N-1]=t1.[N-1] 
    AND t2.SI_Initiative=t1.SI_Initiative 
    AND t2.LineCode=t1.LineCode); 

감사합니다,

미키 엘

+0

이 같은 N1, 이니셔티브 및 LineCode 더 이상의 레코드에 동일한 타임 스탬프를하지 않아도됩니다, 데이터베이스가 데이터로 채워 가져옵니다 방법으로 보장되어 있습니까? – SunKnight0

답변

1

하나의 옵션은 쿼리에 TOP 2을 사용하는 것입니다,에 의해 내림차순으로 정렬 타임 스탬프를 입력 한 다음 최대 (마지막) 타임 스탬프 레코드를 제외하십시오.

SELECT TOP 2 [N-1], SI_Initiative, LineCode, Timestamp 
FROM TBL_VC_DATA t1 
WHERE t1.Timestamp <> (SELECT MAX(t2.Timestamp) 
         FROM TBL_VC_DATA t2 
         WHERE t2.timestamp <> t1.timestamp AND 
          t2.[N-1] = t1.[N-1] AND 
          t2.SI_Initiative = t1.SI_Initiative AND 
          t2.LineCode = t1.LineCode) 
ORDER BY t1.Timestamp DESC 
는 위의 질의 마지막과 마지막에서 두 번째에 관한 기록 사이의 시간이 있어야한다 모두 레코드를 반환 할 수 있기 때문에 WHERE t2.timestamp <> t1.timestamp의 서브 쿼리의 WHERE 절에 귀하의 추가는, 좋은

타임 스탬프 값.

0

감사하지만 검색어가 제대로 작동하지 않지만 원하는대로 표시됩니다. [N-1] 분야의 B2C 외에도 SI 이니셔티브 및 회선 코드가있는 다른 부서도 있습니다. 이러한 다른 부서도 쿼리에 포함되어야합니다.

기본적으로 N-1의 모든 부서에 대해 모든 SI_initiative 및 광고 항목 조합이 표시되어야합니다 (마지막으로 타임 스탬프를 쿼리해야 함을 고려해야 함). 어디서 그리고 나서 내부 조인을 바꿔야합니까?

감사합니다,

미키 엘