sql-server - 根据一列中的值从查询中删除重复行
问题描述
我有一个表(SQL Server),我在其中存储了所有自动化测试用例的运行状态,并且我试图提出一个 SQL 查询来检索每个 runid 的状态,但是我遇到了一些问题.
表内数据示例:
KRUNID | KTIME | FK_TC_ID | NOPART | STATUS | ENV
-------+----------------+------------+--------+--------+-----
4180-2 | 20190109080000 | TC0001 | 123456 | Passed | INT
4180-2 | 20190109080100 | TC0002 | 123457 | Failed | INT
4180-2 | 20190109080200 | TC0003 | 123458 | Passed | INT
4180-2 | 20190109080400 | TC0002 | 123459 | Passed | INT
现在,我有这个查询(连接语句用于显示实际的测试用例名称和业务域):
SELECT KRUNID, TD_NAME, TS_NAME, FK_TC_ID, TC_DISPLAYNAME, NOPARTENAIRE,
ENV, STATUS FROM RU_RUNSTATUS
INNER JOIN TC_TESTCASES ON K_TC_ID = FK_TC_ID
INNER JOIN TS_TCSUBDOMAINS ON K_TS_ID = FK_TS_ID
INNER JOIN TD_TCDOMAINS on K_TD_ID = FK_TD_ID
WHERE KRUNID = '418-2'
ORDER BY FK_TS_ID, K_TC_ID
查询是基本的,它工作正常,除了当我只想根据 KTIME 获得最后一行时,我将有 2 行用于 TC0002(出于各种原因,我不想根据 STATUS 进行过滤)。
我还没有找到正确的方法来修改我的查询以获得我想要的结果。我怎样才能做到这一点?
谢谢
解决方案
我认为这篇文章可以回应:Get top 1 row of each group
查看您的查询,限制由 FK_TC_ID 分区并按 KTIME 排序
;WITH cte AS
(
SELECT FK_TS_ID, KRUNID, TD_NAME, TS_NAME, FK_TC_ID , TC_DISPLAYNAME, NOPARTENAIRE,
ENV, STATUS, ROW_NUMBER() OVER (PARTITION BY FK_TC_ID ORDER BY KTIME DESC) AS rn
FROM RU_RUNSTATUS
INNER JOIN TC_TESTCASES ON K_TC_ID = FK_TC_ID
INNER JOIN TS_TCSUBDOMAINS ON K_TS_ID = FK_TS_ID
INNER JOIN TD_TCDOMAINS on K_TD_ID = FK_TD_ID
WHERE KRUNID = '418-2'
)
SELECT *
FROM cte
WHERE rn = 1
ORDER BY FK_TS_ID, K_TC_ID
推荐阅读
- excel - VBA Excel如何匹配两列并将数据粘贴到另一列
- python - OpenCV Python:仅在 ROI 中检测线
- android - 如何在 Debain 下获得访问 android 手机摄像头的权限
- java - response.sendRedirect() 没有重定向,也没有抛出任何错误
- performance - 埃斯珀性能问题
- jasmine - 有什么区别: 1. browser.wait(EC...) 2. browser.wait (function () {}) 3. browser.sleep()
- vue.js - 更新 Vuex 数组中的对象项
- ios - Swift 4 中的 Java ByteBuffer 等价物
- python - Python - 变量如何影响循环
- email - 为什么我的电子邮件内容中没有任何指向我网站的链接?