2014-12-28 4 views
0

이전 행에서 값을 검색하는 방법을 찾으려고합니다. 내가하고 싶은 일은 먼저 날짜 1 (가장 먼저 시작)에 의해 행을 정렬하는 것입니다. 그런 다음 Date 2가 해당 열의 이전 날짜보다 늦은 경우 그 행 (첫 번째 초기 행 포함)을 꺼내려고합니다. 내 서버가 LAG 기능을 지원하지 않습니다. CTE를 사용하여 제안을 시도했지만 서버가 그 중 하나를 인식하지 못하는 것 같습니다.MySQL의 이전 행 값

내가 원하는 것은 날짜순으로 정렬 한 후, 행 2에 대해 Date_2> 행 1에 대해 Date_2를, 그리고 그 행을 반환하는지 확인하는 것입니다.

다음은 표의 예입니다. ID Date_1 Date_2 Previous_max 4 1999-07-01 2010-12-01 NULL 3 2000-06-01 2011-01-01 2010-12-01 2 2001-08-01 2013-06-01 2011-01-01

ID 1과 5가 반환되지 않습니다 : 당신이 볼 수 있듯이, ID 1. 내 예에 따라서 ID Date 1 Date 2 1 2000-01-01 2010-01-01 2 2001-08-01 2013-06-01 3 2000-06-01 2011-01-01 4 1999-07-01 2010-12-01 5 2002-02-01 2012-12-01

, 나는이 3 개 레코드를 반환 할 날짜와 같은 순서로하지 않습니다 날짜 1은 나중에 있고 날짜 2는 다른 행보다 빠르기 (각각 4 및 2) 때문입니다.

+0

SQL 서버와 오라클의 지원이 쉽고 잘 수행을하게 LAG 키워드. MySql에 필요한 해킹은 그다지 중요하지 않습니다. –

답변

2

당신은 상관 하위 쿼리와 함께이 작업을 수행 할 수 있어야한다 :

select t.*, 
     (select max(date_2) from table t2 where t2.date_1 < t.date_1) as prev_max 
    from table t 
    having prev_max is null or prev_max < date_2; 
+0

도움 주셔서 감사합니다. 나는 SQL에 상당히 익숙하지 않고 "table t2"의 사용을 이해하지 못합니까? 한 테이블 (이 경우 테이블 t)에있는 데이터 만 있습니다. 코드를 실행하려고하면 # 1064 오류가 발생합니다. – Andy

+0

't2'는 테이블 별칭입니다. 하위 쿼리의 테이블에 대한 참조를 외부 쿼리의 참조와 구별하는 방법입니다. 테이블 별칭이 필요한 경우입니다. –