0

我有下表:

Emp_Id    In_Time               Out_time             
10     '2014-07-16 08:25:00'  '2014-07-16 10:25:00'  
10     '2014-07-16 10:35:00'  '2014-07-16 14:42:00'
10     '2014-07-16 15:00:00'  '2014-07-16 16:03:00'
10     '2014-07-16 16:15:00'  '2014-07-16 16:24:00'

在该表中,办公室(进出)、午休(进出)、茶歇等记录在同一列中。我的目标是找到(In_time)的最小值和(Out_time)的最大值来记录在办公室的总时间。最终输出应该是这样的:

Emp_Id        In_Time                 Out_Time
10           '2014-07-16 08:25:00'    '2014-07-16 16:24:00'

我正在处理这段代码:

select Emp_Id, min(In_Time) over(partition by Emp_Id) as start, 
max(Out_Time) over(partition by Emp_Id) as stop,
from tablename
where day(In_Time) = day (Out_time) 
group by (Emp_Id, In_Time, Out_time)

我正在检查日期是否相同,以确保输入日期中的输入错误包含在最终结果中。在这样做时,我得到两个具有相同值的四行。我意识到将所有内容分组是导致这种情况的原因,但 Netezza 不允许分组中的单个属性。有人可以帮我找到正确的解决方案。

4

1 回答 1

1

我认为您可以使用group byand date_trunc()

select Emp_Id, date_trunc('day', in_time) as date,
       min(In_Time) as start, max(Out_Time) as stop,
from tablename
where date_trunc('day', In_Time) = date_trunc('day', Out_Time)
group by Emp_Id, date_trunc('day', in_time);
于 2019-07-10T19:55:37.350 回答