2012-12-16 3 views
0

에 대한 조인 테이블의 : 참조 두의 다음SQL 자체가 최신 행 여기

id -   date    - attempts 
    -------------------------------------------- 
    1 - 2012-12-11 14:52:06.143  - success 
    2 - 2012-12-11 15:51:52.320  - whatever 
    3 - 2012-12-11 12:51:52.321  - success 
    4 - 2012-12-11 12:51:52.312  - whatever 
    5 - 2012-12-11 14:51:52.320  - fail 

나는 '실패'최신을 얻기 위해 노력하고 최신 '성공'행과 최신의 경우 실패했습니다 (실패 행보다 나중에 성공 행이있을 수 있음).

'성공'또는 '실패'가 아닌 다른 행을 선택할 수 있습니다.

+0

'ORDER BY' +는'('실패', '성공') ' – zerkms

답변

3

내부 쿼리는 시도가 성공 또는 실패한 최신 날짜로 레코드를 식별합니다. 외부 쿼리는 내부 쿼리의 결과와 결합하여 실패 레코드를 식별합니다.

SELECT 
    a.* 
FROM 
    myTable a 
    JOIN 
    (
     SELECT MAX(date) AS `date` FROM myTable 
     WHERE attempts IN ('success', 'fail') 
    ) b 
    ON a.date = b.date 
WHERE 
    a.attempts = 'fail' 
+1

우수한 솔루션을 시도합니다. http://sqlfiddle.com/#!2/30d6f/2 –

+1

(ON 절이 성공할 수 있도록'date' 별칭이 추가되었습니다.) –

+0

Ah! 고맙습니다. 나는 그것을 놓쳤다. – Vikdor

0
Select s.id successId, s.date latestSuccess, 
     f.id failId, f.date latestFail, 
     case When s.date > f.Date 
       Then 'Success' Else 'Fail' End Last 
    From myTable s full join mytable f 
    On s.attempts = 'success' 
     And s.date - (Select Max(date) From myTable 
        Where attempts = 'success') 
     And f.attempts = 'fail' 
     And f.date - (Select Max(date) From myTable 
         Where attempts = 'fail')