Извлечение минимальных и максимальных значений из разных столбцов в sql - PullRequest
0 голосов
/ 10 июля 2019

У меня есть следующая таблица:

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 Ответ

1 голос
/ 10 июля 2019

Я думаю, вы можете использовать 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);
...