Первая и последняя запись каждого дня для каждого сотрудника - PullRequest
1 голос
/ 07 ноября 2019

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

Date        Time        Terminal ID      SL     Name            Employee ID
------------------------------------------------------------------------------
26-10-19    13:03:21    0103:Device-IN  418  Md.Ariful Islam    BRI-000041
26-10-19    8:00:23     0102:Device-In  418  Md.Ariful Islam    BRI-000041
26-10-19    7:58:12     0101:Device-Out 418  Md.Ariful Islam    BRI-000041
26-10-19    13:05:55    0101:Device-Out 340  Md.Hasan Gazi      BRI-000043
26-10-19    9:03:19     0102:Device-In  340  Md.Hasan Gazi      BRI-000043
26-10-19    16:12:31    0101:Device-Out 341  Md.Jakir Hossain   BRI-000044
26-10-19    14:38:57    0102:Device-In  341  Md.Jakir Hossain   BRI-000044
26-10-19    13:29:12    0101:Device-Out 341  Md.Jakir Hossain   BRI-000044
26-10-19    9:32:52     0102:Device-In  341  Md.Jakir Hossain   BRI-000044
26-10-19    7:34:13     0101:Device-Out 341  Md.Jakir Hossain   BRI-000044
26-10-19    13:00:28    0101:Device-Out 335  Md.Nazim Uddin     BRI-000045
26-10-19    8:25:42     0102:Device-In  335  Md.Nazim Uddin     BRI-000045
26-10-19    15:03:11    0102:Device-In  396  Md.Sojib Khan      BRI-000046
26-10-19    14:00:30    0101:Device-Out 288  Md.Rasel Hossain   BRI-000048
26-10-19    14:00:26    0101:Device-Out 288  Md.Rasel Hossain   BRI-000048
26-10-19    8:29:46     0102:Device-In  288  Md.Rasel Hossain   BRI-000048

enter image description here

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

В MS Access вы можете сделать:

select t.*
from t
where t.time = (select min(t2.time)
                from t as t2
                where t2.sl = t.sl and
                      t2.date = t.date
               ) or
      t.time = (select max(t2.time)
                from t as t2
                where t2.sl = t.sl and
                      t2.date = t.date
               ) ;
2 голосов
/ 07 ноября 2019

Вы можете попробовать использовать UNION для максимального IN и минимального OUT

select date
  , max(time)
  , Terminal_ID  
  , SL
  , Name
  , Employee_ID 
from  my_table  
where Terminal_ID  like ('%IN')
GROUP BY date, Terminal_ID, SL, Name, Employee_ID 
UNION 
select date
  , min(time)
  , Terminal_ID  
  , SL
  , Name
  , Employee_ID 
from  my_table  
where Terminal_ID  like ('%OUT')
GROUP BY date, Terminal_ID, SL, Name, Employee_ID 
order by date,  Employee_ID,Terminal_ID
...