Как получить время первого входа и последнего выхода из сервера sql?

Моя таблица данных, как это..

ID         Name       Date                     Time       Type

 1         aaa      2014-07-01 00:00:00:000    9:35:43     In
 1         aaa      2014-07-01 00:00:00:000    11:10:43    OUT
 1         aaa      2014-07-01 00:00:00:000    11:35:43    In
 1         aaa      2014-07-01 00:00:00:000    1:00:43     OUT
 1         aaa      2014-07-01 00:00:00:000    1:35:43     In
 1         aaa      2014-07-01 00:00:00:000    4:00:43     OUT
 1         aaa      2014-07-01 00:00:00:000    4:10:43     In        
 1         aaa      2014-07-01 00:00:00:000    6:35:43     OUT

 2         Baa      2014-07-01 00:00:00:000    9:35:43     In
 2         Baa      2014-07-01 00:00:00:000    11:10:43    OUT
 2         Baa      2014-07-01 00:00:00:000    11:35:43    In
 2         Baa      2014-07-01 00:00:00:000    1:00:43     OUT
 2         Baa      2014-07-01 00:00:00:000    1:35:43     In
 2         Baa      2014-07-01 00:00:00:000    4:00:43     OUT
 2         Baa      2014-07-01 00:00:00:000    4:10:43     In        
 2         Baa      2014-07-01 00:00:00:000    6:35:43     OUT

теперь я хочу получить только первые и последние детали из таблицы, используя sql. как я могу получить, пожалуйста, помогите мне


person Sambasiva    schedule 30.07.2014    source источник
comment
что ты уже испробовал? я рекомендую вам взглянуть на функции MIN() и MAX().   -  person Matthias R.    schedule 30.07.2014
comment
Почему вы храните время отдельно от даты?   -  person neshkeev    schedule 30.07.2014
comment
Вы хотите иметь эту информацию на каждый день (ВХОД:30.07.2014 00:00, ВХОД:30.07.2014 19:00, ВХОД:29.07.2014 01:00, ВХОД:29.07.2014 14:00, ... ) или вы хотите иметь только первый вход и последний выход (на примере выше: ВХОД: 30.07.2014 00:00, ВЫХОД: 29.07.2014 14:00, ...)?   -  person neshkeev    schedule 30.07.2014
comment
Я хочу каждый день Время первого входа и время последнего выхода..   -  person Sambasiva    schedule 30.07.2014


Ответы (2)


Попробуй это:

select * 
  from <YOUR_TABLE_HERE> ttt
  join (
      select max(time) logout_time, name, date
        from <YOUR_TABLE_HERE>
       where type = 'Out'
       group by name, date) max_date_table on ttt.name = max_date_table.name and ttt.date = max_date_table.date and max_date_table.logout_time = ttt.time
  join (
      select min(time) login_time, name, date
        from <YOUR_TABLE_HERE>
       where type = 'In'
       group by name, date) min_date_table on ttt.name = min_date_table.name and ttt.date = min_date_table.date and ttt.time = min_date_table.login_time
order by name
person neshkeev    schedule 30.07.2014

person    schedule
comment
Вы забыли group_by в своих CTE - person neshkeev; 30.07.2014
comment
у вас будут минимальные даты ВХОДОВ и максимальное количество выходов за каждый день, возможно, автор ожидает именно этого решения - person neshkeev; 30.07.2014
comment
Я предположил, что будет логично запрашивать min и max для каждого человека на каждый день. - person Giannis Paraskevopoulos; 30.07.2014
comment
Это может иметь смысл, я попросил автора разъяснить. - person neshkeev; 30.07.2014