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

时间:2019-02-21 19:37:47

标签: sql oracle plsql plsqldeveloper

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

  • jon 15
  • 鲍勃38
  • 史蒂夫180
  • 鲍勃14
  • 史蒂夫240
  • 史蒂夫180
  • luk 203

但我期望这样:

  • jon 15
  • 鲍勃38
  • 史蒂夫240
  • luk 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

我需要Steve 11:00-7:00的结果 不是10-7:00或11:00-8:00谁在条件为真的情况下,我要为该用户提供最大值

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

如果您正在寻找数学,请执行以下操作:   选择用户,从中输入(选择用户,从用户的emp组中选择最小(输入),最大(输出));