2011-08-04 3 views
1

나쁜 레코드를 포함하여 위치 (BadRec = 1)와 그 이전 3 레코드 (최대)에 대한 잘못된 레코드를 가져 오는 아래 표를 기반으로 쿼리를 작성하는 데 어려움이 있습니다.SQL 쿼리를 사용하여 이전 레코드를 찾습니다

TranDate    Location BadRec 
======================= ======== ====== 
2010-08-25 00:00:00.000 STN-2  0 
2010-08-26 00:00:00.000 STN-2  1 
2010-08-27 00:00:00.000 STN-1  1 
2010-08-28 00:00:00.000 STN-1  0 
2010-08-28 00:00:00.000 STN-2  1 
2010-08-29 00:00:00.000 STN-1  0 
2010-08-30 00:00:00.000 STN-1  1 
2010-08-31 00:00:00.000 STN-1  0 
2010-09-01 00:00:00.000 STN-1  0 

여기는 예상되는 출력입니다.

TranDate    Location BadRec comments 
======================= ======== ====== ======== 
2010-08-30 00:00:00.000 STN-1  1 <- Bad record on STN-1 
2010-08-29 00:00:00.000 STN-1  0 <- First Previous record 
2010-08-28 00:00:00.000 STN-1  0 <- Second Previous record 
2010-08-27 00:00:00.000 STN-1  1 <- Third Previous record (Previous include bad rec) 
2010-08-28 00:00:00.000 STN-2  1 <- Bad record on STN-2 
2010-08-26 00:00:00.000 STN-2  1  
2010-08-25 00:00:00.000 STN-2  0  
2010-08-27 00:00:00.000 STN-1  1 <- Bad record on STN-1,No previous record for this 
2010-08-26 00:00:00.000 STN-2  1 <- Bad record on STN-2 
2010-08-25 00:00:00.000 STN-2  0  

단일 쿼리를 사용하여 이것을 작성할 수 있습니까 ?? CTE 사용하기 ?? 이상 (파티션 ...) ?? 어떤 도움을 주셔서 감사합니다. 참고 : SQL 2005 시스템을 사용하고 있습니다.

+1

예상 출력에서'2010-08-27 00 : 00 : 00.000 STN-1 1'이 두 번 반복되는 이유는 무엇입니까? – Chandu

+0

2010-08-27 00 : 00 : 00.000 STN-1 1이 2010-08-30에서 첫 번째 행으로 표시되고 두 번째가 BadRec 행으로 표시됩니다. – bobs

+0

감사합니다. 그게 정확히 내가 찾고 있던거야! 감사합니다 – user173552

답변

1

원하는대로 할 수 있습니까?

SELECT TranDate, Location, BadRec 
FROM 
    (
    SELECT pr.TranDate, pr.Location, pr.BadRec, 
     ROW_NUMBER() OVER (PARTITION BY r.TranDate ORDER BY pr.TranDate DESC) AS SEQUENCE 
    FROM Records r 
    JOIN Records pr ON r.Location = pr.Location 
        AND r.TranDate >= pr.TranDate 
    WHERE r.BadRec = 1 
    ) x 
WHERE SEQUENCE <= 4 
+0

+1, 정확한 결과를 얻으려면 주문을 추가하십시오. http://data.stackexchange.com/stackoverflow/qe/1683/sql-query-to-find-previous-records –

관련 문제