Oracle SQL Developer中如何通过查看另一列的值最大来判断多次出现的最新记录?

How to check another column value to be the highest to determine the latest record that occurs multiple times in Oracle SQL Developer?

我有一个名为 ro_main_table 的 table,它存储了制作的详细信息,例如 serial_nrpr_date_timemachine_nrrecord_key 等. 我想从 ro_main_table 中得到不同的 machine_nrrecord key,其中 pr_date_time 在过去 6 小时内。为此,我这样做:

select machine_nr, record_key, pr_date_time from ro_main_table where pr_date_time >= SYSDATE - 6/24;

这给了我下面的 table:

MACHINE_NR RECORD_KEY PR_DATE_TIME
54 9809 17-DEC-20 04.02.35.000000000 AM
55 9811 17-DEC-20 04.58.22.000000000 AM
55 9817 17-DEC-20 09.17.50.000000000 AM
54 9814 17-DEC-20 07.57.24.000000000 AM
50 9818 17-DEC-20 09.45.22.000000000 AM

但是,如您所见,在此期间可能会有机器启动两次(即 machine_nr 出现多次)。如果是这种情况,我会选择record_key最高的记录。例如,对于机器 55,它是 9817。我该如何实现?

非常感谢您!

select machine_nr, 最大值(record_key), pr_date_time 来自 ro_main_table 其中 pr_date_time >= SYSDATE - 6/24 按 machine_nr;

分组

这个查询应该会得到你想要的结果

我找到了一个方法。我像这样创建一个内部连接:

select tt.machine_nr, tt.record_key, tt.pr_date_time 
from ro_main_table tt
INNER JOIN
    (SELECT machine_nr, MAX(record_key) AS MaxRecordKey
    FROM ro_main_table
    GROUP BY machine_nr) groupedtt 
ON tt.machine_nr = groupedtt.machine_nr 
AND tt.record_key = groupedtt.MaxRecordKey
where pr_date_time >= SYSDATE - 6/24;

您可以使用window函数如下:

select * from 
(select machine_nr, record_key, pr_date_time 
       row_number() over (partition by machine_nr order by record_key desc) as rn
from ro_main_table where pr_date_time >= SYSDATE - 6/24)
where rn = 1;