简体   繁体   English

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

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

I would like to get the latest record based on Exec Date and Exec Time columns.我想根据 Exec Date 和 Exec Time 列获取最新记录。

Type of Exec Date column is datetime.执行日期列的类型是日期时间。 Type of Exec Time column is varchar. Exec Time 列的类型是 varchar。

However, as it is not on the same column, I'm not able to do the filter.但是,由于它不在同一列上,我无法进行过滤。

Is it possible to do it with SQL?可以用 SQL 来做吗?

Example例子

Data数据

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

Expected Result预期结果

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

Can you please help me to get this result?你能帮我得到这个结果吗?

Many thanks in advance.提前谢谢了。

UPDATE 1更新 1

As I can't use CTE as I'm doing queries into HPALM, I tried to use a sub-request.由于在查询 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'.

However, I'm geeting all records instead of getting the most recent records per TEST_ID (based on Exec Date and Exec Time) and I don't understand why...但是,我获取所有记录而不是获取每个 TEST_ID 的最新记录(基于执行日期和执行时间),我不明白为什么......

Can you please help me?你能帮我么?

Use RANK here:在这里使用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;

Note that it is usually preferable to store date and time as a single datetime/timestamp column.请注意,通常最好将日期和时间存储为单个日期时间/时间戳列。 You may wish to change your design at some point.您可能希望在某个时候更改您的设计。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM