我有下表:
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不允许分组依据中使用单个属性。 有人可以为我提供正确的解决方案吗?
答案 0 :(得分:1)
我认为您可以使用group by
和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);