我正在为我的项目使用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有最后更新的列表)。
答案 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
本质上不可靠,可能导致瞬态值不一致,尤其是在分组/分区查询时。