2013-01-11 170 views
1

我有這張表表示測試用例執行情況,對於一個特定的測試用例,可能有許多具有不同狀態的執行情況。SQL查詢具有不同時間戳的相同ID的多個實例

id | testcase_id | status | timestamp 
------------------------------------------------------- 
1 | 2   | fail  | 2013-01-11 15:00:00 
------------------------------------------------------- 
2 | 2   | pass  | 2013-01-11 15:05:00 
------------------------------------------------------- 
3 | 4   | fail  | 2013-01-11 16:00:00 
------------------------------------------------------- 
4 | 4   | pass  | 2013-01-11 16:04:00 

,我想從這個表中提取的是最新的執行結果,即:

id | testcase_id | status | timestamp 
------------------------------------------------------- 
2 | 2   | pass  | 2013-01-11 15:05:00 
------------------------------------------------------- 
4 | 4   | pass  | 2013-01-11 16:04:00 

我怎麼能做到這一點?

回答

1
SELECT id,testcase_id,status,timestamp 
FROM 
    (
     SELECT id,testcase_id,status,timestamp, 
       ROW_NUMBER() OVER (PARTITION BY testcase_id 
            ORDER BY timestamp DESC) rn 
     FROM tableName 
    ) s 
WHERE Rn = 1 

WITH latestRecord 
AS 
(
    SELECT id,testcase_id,status,timestamp, 
    ROW_NUMBER() OVER (PARTITION BY testcase_id ORDER BY timestamp DESC) rn 
    FROM tableName 
) 
SELECT id,testcase_id,status,timestamp 
FROM latestRecord 
WHERE Rn = 1 
0
select tc.* 
from testcases tc 
inner join (
    select testcase_id, 
    max(timestamp) maxTimestamp 
    from testcases 
    group by testcase_id 
    ) tcMaxes 
on tc.testcase_id = tcMaxes.testcase_id 
and tc.timestamp = tcMaxes.maxTimestamp 
相關問題