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_nr
、pr_date_time
、machine_nr
、record_key
等. 我想从 ro_main_table 中得到不同的 machine_nr
和 record 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;
我有一个名为 ro_main_table
的 table,它存储了制作的详细信息,例如 serial_nr
、pr_date_time
、machine_nr
、record_key
等. 我想从 ro_main_table 中得到不同的 machine_nr
和 record 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;