我需要有关此代码的帮助吗? 结果是:
但我期望这样:
用户循环中的最大值
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谁在条件为真的情况下,我要为该用户提供最大值
答案 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组中选择最小(输入),最大(输出));