从sql中不同列中提取最小值和最大值

时间:2019-07-10 19:53:51

标签: sql netezza

我有下表:

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不允许分组依据中使用单个属性。 有人可以为我提供正确的解决方案吗?

1 个答案:

答案 0 :(得分:1)

我认为您可以使用group bydate_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);