如何根据执行日期和执行时间列获取记录?

How to get record based on Exec Date and Exec Time column?

我想获取基于执行日期和执行时间列的最新记录。

执行日期列的类型是日期时间。执行时间列的类型是 varchar。

但是,由于不在同一列,我无法进行筛选。

可以用SQL吗?

例子

数据

RN_TEST_ID  | RN_RUN_ID  | RN_EXECUTION_DATE   | RN_EXECUTION_TIME | ST_STATUS
585858      | 214566     | 2022-04-04 00:00:00 |  16:30:12         | P
585858      | 214566     | 2022-04-04 00:00:00 |  16:30:12         | N
585858      | 214566     | 2022-04-04 00:00:00 |  16:30:12         | N
585858      | 214566     | 2022-04-04 00:00:00 |  16:30:12         | P
585858      | 963247     | 2022-04-04 00:00:00 |  17:51:15         | P
585858      | 963247     | 2022-04-04 00:00:00 |  17:51:15         | P
585858      | 963247     | 2022-04-04 00:00:00 |  17:51:15         | F
585858      | 963247     | 2022-04-04 00:00:00 |  17:51:15         | F
124578      | 852369     | 2022-04-06 00:00:00 |  12:20:01         | P
124578      | 852369     | 2022-04-06 00:00:00 |  12:20:01         | P
124578      | 852369     | 2022-04-06 00:00:00 |  12:20:01         | P
124578      | 852369     | 2022-04-06 00:00:00 |  12:20:01         | P
124578      | 148623     | 2022-04-07 00:00:00 |  10:51:48         | F
124578      | 148623     | 2022-04-07 00:00:00 |  10:51:48         | N
124578      | 148623     | 2022-04-07 00:00:00 |  10:51:48         | F
124578      | 148623     | 2022-04-07 00:00:00 |  10:51:48         | F

预期结果

RN_TEST_ID  | RN_RUN_ID  | RN_EXECUTION_DATE   | RN_EXECUTION_TIME | ST_STATUS
585858      | 963247     | 2022-04-04 00:00:00 |  17:51:15         | P
585858      | 963247     | 2022-04-04 00:00:00 |  17:51:15         | P
585858      | 963247     | 2022-04-04 00:00:00 |  17:51:15         | F
585858      | 963247     | 2022-04-04 00:00:00 |  17:51:15         | F
124578      | 148623     | 2022-04-07 00:00:00 |  10:51:48         | F
124578      | 148623     | 2022-04-07 00:00:00 |  10:51:48         | N
124578      | 148623     | 2022-04-07 00:00:00 |  10:51:48         | F
124578      | 148623     | 2022-04-07 00:00:00 |  10:51:48         | F

你能帮我得到这个结果吗?

非常感谢。

更新 1

因为我无法在 HPALM 中查询时使用 CTE,所以我尝试使用子请求。

SELECT RN_TEST_ID, RN_RUN_ID, RN_EXECUTION_DATE, RN_EXECUTION_TIME, ST_STATUS
FROM (
SELECT RANK() OVER (PARTITION BY RN_TEST_ID ORDER BY RN_EXECUTION_DATE, RN_EXECUTION_TIME) AS DR, RUN.*
FROM RUN
) AS REQ
INNER JOIN STEP ON REQ.RN_RUN_ID = STEP.ST_RUN_ID
WHERE DR = 1 AND REQ.RN_ASSIGN_RCYC = '1100'.

但是,我获取所有记录而不是获取每个 TEST_ID 的最新记录(基于执行日期和执行时间),我不明白为什么...

你能帮帮我吗?

此处使用RANK

WITH cte AS (
    SELECT *, RANK() OVER (PARTITION BY RN_TEST_ID
                           ORDER BY RN_EXECUTION_DATE DESC, RN_EXECUTION_TIME DESC) rnk
    FROM yourTable
)

SELECT RN_TEST_ID, RN_RUN_ID, RN_EXECUTION_DATE, RN_EXECUTION_TIME, ST_STATUS
FROM cte
WHERE rnk = 1;

请注意,通常最好将日期和时间存储为单个 datetime/timestamp 列。您可能希望在某个时候更改您的设计。