Журнал посещаемости с использованием MS Access или SQL Server - PullRequest
0 голосов
/ 01 июня 2018

Я работаю почти месяц, но думаю, что мне нужна помощь сейчас.У меня есть время журналы ниже.Я использую MS Access и C #.Пожалуйста, помогите, что выбрать запрос

ID  BADGE   CHECKTIME
-----------------------------
1   1507010 5/31/2018 8:51
1   1507010 5/31/2018 19:52
2   1708004 5/31/2018 6:35
2   1708004 5/31/2018 13:43
3   1708005 5/31/2018 19:23
3   1708005 6/1/2018 8:34
4   1708006 5/31/2018 7:51
4   1708006 6/1/2018 18:34
5   1708007 5/31/2018 19:23
5   1708007 6/1/2018 6:36
6   1708009 5/31/2018 7:11
6   1708009 5/31/2018 7:12
6   1708009 5/31/2018 22:02
6   1708009 5/31/2018 22:03

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

ID  Badge   IN              OUT
--------------------------------------------
1   1507010 5/31/2018 8:51  5/31/2018 13:43
2   1708004 5/31/2018 6:35  5/31/2018 13:43
3   1708005 5/31/2018 19:23 6/1/2018 8:34
4   1708006 5/31/2018 7:51  6/1/2018 18:34
5   1708007 5/31/2018 19:23 6/1/2018 6:36
6   1708009 5/31/2018 7:12  5/31/2018 22:03

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Я бы использовал row_number() внутри subquery:

select id, badge, min(checktime) as in, max(checktime) as out
from (select *,  row_number() over (partition by id, badge, cast(checktime as date), datepart(hh,checktime) 
                                       order by datepart(mm,checktime) desc) seq
      from table 
     ) t
where seq = 1
group by id, badge;
0 голосов
/ 01 июня 2018

Следующий запрос должен быть близок к тому, что вы хотите:

SELECT
    ID,
    Badge,
    MIN(CHECKTIME) AS [IN],
    MAX(CHECKTIME) AS [OUT]
FROM yourTable
GROUP BY
    ID,
    Badge;

У меня есть сомнения относительно вашего ожидаемого вывода для значка 1708009, так как самое раннее время проверки для этого значка 7:11,не 7:12.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...