如何仅从嵌套for循环中的变量中获取最大值

Posted

技术标签:

【中文标题】如何仅从嵌套for循环中的变量中获取最大值【英文标题】:How to get only max value from variable in nested for loop 【发布时间】:2019-02-21 19:37:46 【问题描述】:

我需要有关此代码的帮助吗? 结果是:

乔恩 15 鲍勃 38 史蒂夫 180 鲍勃 14 史蒂夫 240 史蒂夫 180 卢克203

但我是这样认为的:

乔恩 15 鲍勃 38 史蒂夫 240 卢克203

用户循环的最大值

 DECLARE

v_z VARCHAR2(50);
max_s  VARCHAR2(50);

BEGIN

max_s := -9999999999999;

FOR i     IN
(SELECT user,
  in,
  out 
  FROM emp)

LOOP
FOR j IN
(SELECT user,
  in,
  out
FROM emp
AND user = i.user
)
LOOP
  IF i.in < j.in AND i.out < j.out AND i.out > j.in AND i.out < j.out AND i.user = j.user 

THEN
    v_z  := ROUND((j.out-i.in),4)*1440 ;

    FOR r                         IN v_z..v_z
    LOOP
      IF r > max_s THEN
        dbms_output.put_line (i.user || ' ' ||r);
      END IF;
    END LOOP;

  END IF;
END LOOP;
END LOOP;
END;

表格示例:

  user    in     out
  steve  7:00    9:30
  steve  8:00   10:00
  steve  9:00   11:00

我需要 11:00 - 7:00 给史蒂夫的结果 不是 10 - 7:00 或 11:00 - 8:00,如果条件为真,我想要此用户的最大值

【问题讨论】:

【参考方案1】:

这可以通过单个 select 语句轻松完成。使用 PL/SQL 显然没有任何好处,而且速度肯定更慢。

select name, max(num) from tbl
group by name

【讨论】:

感谢您的询问,但再看看我需要什么。谢谢 这背后的逻辑是什么? 如果 7:008:00 and 10:00 > 9:30 then 10:00 - 7:00 result 3*60 = 180 对于这个例子我需要 11:00 - 7:00 然后是循环中的 4*60 240 最大值【参考方案2】:

我仍然建议您最好的解决方案是使用 SQL 来提取值而不是循环。看起来您想要按用户分组的 max(out) - min(in)。

在我的脑海中,我建议如下: 按用户从emp组中选择用户、min(in)、max(out);

如果您正在寻找它,请计算: select user, out-in from (select user, min(in) as in, max(out) as out from emp group by user);

【讨论】:

我想要修剪交叉点。如果 7:00 和 9:30 之间的 8:00 则 10:00-7:00 结果为 3h 如果 7:00 和 9:30 之间的 9:00 则 11:00-7:00 结果为 4h 如果 9:00 在 8 之间:00 和 10:00 然后 11:00 - 8:00 结果 3h。在此示例中,如果 contition 为真,我希望结果为 4h 如果此示例中的 9:00 不在 7:00 和 9:30 之间或不在 8:00 和 10:00 之间,则结果为 10:00 - 7:00 = 3h跨度> @Spec,有没有办法转换为 24 小时制(所以晚上 7:00 = 19:00)。您的数据是如何存储的(日期、数字或特定格式的文本)?

以上是关于如何仅从嵌套for循环中的变量中获取最大值的主要内容,如果未能解决你的问题,请参考以下文章

第三节 java 数组(循环遍历获取数组的最值(最大值和最小值)选择排序冒泡排序练习控制台输出大写的A)

js水仙花数,闰年,最大公约数

verilog 如何循环比较数据大小?

C 无限循环(如果嵌套在 FOR LOOP 中)

如何仅从系列或列表中获取特定值[关闭]

如何使用嵌套循环打印出X.