如何获得最新执行的TC没有重复

时间:2016-05-17 12:16:44

标签: sql-server sql-server-2008

我正在为我的项目使用SQL Server并在我的页面中显示一些指标。 我的一个指标有TC执行计数,但它显示TC也执行重复输入。

如何才能获得TC最近执行的列表而不重复?

我的SQL Server查询是:

SELECT 
    a.tc_id tc_id,
    a.status STATUS,
    MAX(a.exn_time) exn_Time,
    'auto' tctype
FROM 
    auto_details a WITH (NOLOCK)
WHERE 
    a.status IN ('Pass', 'Fail')
    AND project = 'proj2'
GROUP BY 
    a.tc_id, a.status

在下面的输出显示中,同一个tc_id的失败和传递列表。但我只想要不同的执行列表(exn_Time有最后更新的列表)。

enter image description here

2 个答案:

答案 0 :(得分:0)

Create Table Auto_Details (tc_id varchar(8000), Status varchar(8000), exn_Time datetime, project varchar(8000))
Insert Auto_Details Values ('TC_001', 'PASS', '2016-05-16 15:47:27.580', 'proj2')
Insert Auto_Details Values ('TC_001', 'FAIL', '2016-05-16 15:52:14.787', 'proj2')
Insert Auto_Details Values ('TC_002', 'FAIL', '2016-05-16 15:47:27.580', 'proj2')
Insert Auto_Details Values ('TC_002', 'PASS', '2016-05-16 12:43:27.580', 'proj2')

With cteMetrics As
(
Select tc_id, exn_time, Status,
        Row_Number() Over (Partition By tc_id Order By exn_Time Desc) Sort
    From Auto_Details with(NOLOCK)
    Where status IN ('Pass', 'Fail')
        AND project = 'proj2'
)
Select *
    From cteMetrics
    Where Sort = 1

答案 1 :(得分:0)

我怀疑你想要的是更像这样的东西:

;WITH cte
(
    SELECT  *, 
            ROW_NUMBER() OVER(PARTITION BY tc_id ORDER BY exn_time DESC) AS exn_no
    FROM    auto_details
    WHERE   a.status IN ('Pass', 'Fail')
      AND   project = 'proj2'
)
SELECT a.tc_id      tc_id,
       a.status     STATUS,
       a.exn_time   exn_Time,
       'auto'       tctype
  FROM cte a 
 WHERE exn_no = 1

此外,仅供参考,nolock本质上不可靠,可能导致瞬态值不一致,尤其是在分组/分区查询时。