我试图在Oracle SQL中创建一个Rank函数,但我根本没有成功。我想在我已经创建的查询结果上创建一个排名,并且效果很好。这是我的疑问:
select
MACHINE,
sum(DURATION/60) AS Min,
OBSERVATION,
to_char(min(START_DATE), 'MM/DD/YYYY_HH24') as date_hour,
OBSERVATION || ' (' || rtrim(to_char(sum(DURATION/60), 'FM90.99'), '.') || ' Min) ' AS lost_prod
from MyTable
where TRUNC(START_DATE) = TRUNC(CURRENT_DATE) and OBSERVATION IS NOT NULL
group by MACHINE, OBSERVATION, to_char(START_DATE, 'MM/DD/YYYY_HH24')
字符串
这个查询给我带来了一天中同一小时内每个MACHINE和OBSERVATION的持续时间之和。我的查询带来了一天中每个小时的观察(与其持续时间的不同总和连接为LOST_PROD),但我希望此查询仅显示machine、observation和date_hour的每个组合中持续时间最长的两个观察。我该怎么做?
我上面的查询给了我以下结果:
MACHINE | MIN | OBSERVATION | DATE_HOUR | LOST_PROD
AAA 2.7 OFF RANGE 07/16/2023_10 OFF RANGE (2.7 Min)
AAA 3.1 LOW LEVEL 07/16/2023_10 LOW LEVEL (3.1 Min)
AAA 1.5 COLD FLEX 07/16/2023_10 COLD FLEX (1.5 Min)
AAA 1.1 LOW LEVEL 07/16/2023_11 COLD FLEX (1.1 Min)
AAA 4.7 OFF RANGE 07/16/2023_11 COLD FLEX (4.7 Min)
AAA 0.2 COLD FLEX 07/16/2023_11 COLD FLEX (0.2 Min)
TTT 1.9 LOW LEVEL 07/16/2023_11 COLD FLEX (1.9 Min)
TTT 1.4 RED ALERT 07/16/2023_11 COLD FLEX (1.4 Min)
TTT 1.1 COLD FLEX 07/16/2023_11 COLD FLEX (1.1 Min)
型
我想做的这个Rank查询的预期结果如下所示:
MACHINE | MIN | OBSERVATION | DATE_HOUR | LOST_PROD
AAA 2.7 OFF RANGE 07/16/2023_10 OFF RANGE (2.7 Min)
AAA 3.1 LOW LEVEL 07/16/2023_10 LOW LEVEL (3.1 Min)
AAA 1.1 LOW LEVEL 07/16/2023_11 COLD FLEX (1.1 Min)
AAA 4.7 OFF RANGE 07/16/2023_11 COLD FLEX (4.7 Min)
TTT 1.9 LOW LEVEL 07/16/2023_11 COLD FLEX (1.9 Min)
TTT 1.4 RED ALERT 07/16/2023_11 COLD FLEX (1.4 Min)
型
1条答案
按热度按时间r7xajy2e1#
使用
ROW_NUMBER
解析函数:字符串
其中,对于样本数据:
型
输出:
| MIN|观察|日期小时|LOST_PROD| LOST_PROD |
| --|--|--|--| ------------ |
| 3.1|低水平|2019 - 05 - 10|低液位(3.1分钟)| LOW LEVEL (3.1 Min) |
| 2.7|超出范围|2019 - 05 - 10|关闭范围(2.7分钟)| OFF RANGE (2.7 Min) |
| 4.7|超出范围|2019 - 05 - 11|关闭范围(4.7分钟)| OFF RANGE (4.7 Min) |
| 1.1|低水平|2019 - 05 - 11|低液位(1.1分钟)| LOW LEVEL (1.1 Min) |
| 1.9|低水平|2019 - 05 - 11|低液位(1.9分钟)| LOW LEVEL (1.9 Min) |
| 1.4|红色警报|2019 - 05 - 11|红色警报(1.4分钟)| RED ALERT (1.4 Min) |
fiddle