powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выбор записей по времени за период
11 сообщений из 11, страница 1 из 1
Выбор записей по времени за период
    #39346762
Psylosopher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня! Возникла такая задача. Есть таблица, выгруженная из БД СКУД, в которой содержатся данные о приходе и уходе сотрудников с работы. Загвоздка заключается в том, что сведения о времени находятся в одном столбце. Формат таблицы примерно такой:

Имя ДатаВремяИванов13.11.2016 08:45Иванов13.11.2016 18:12Петров13.11.2016 08:53 Петров13.11.2016 19:03 Иванов14.11.2016 08:56Иванов14.11.2016 18:01Петров14.11.2016 09:00Петров14.11.2016 18:03

Задача сделать отчет за месяц, где будут столбцы:

ИмяВремяПриходаВремяУходаИванов13.11.2016 08:4513.11.2016 18:12Петров13.11.2016 08:5313.11.2016 19:03 Иванов14.11.2016 08:5614.11.2016 18:01Петров14.11.2016 09:0014.11.2016 18:03

Сижу и ломаю голову каков должен быть запрос. Приходит на ум использование max и min, но как сделать выборку за период времени чтобы разделить приход и уход по дням? Какими-то подзапросами надо наверняка это решать? Но как? Опыта работы с датами не особо.... :(
...
Рейтинг: 0 / 0
Выбор записей по времени за период
    #39346788
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Psylosopher,

Идея такая: сделать 2 запроса с группировкой по Имени и дате (из ДатаВремя выделить дату и время) на мах и мин и объеденить их

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select t1.[Имя], t1,dt as WorkDate, t1.Entrance, t2.Leave
from (
   select  [Имя], dt, min(tm) as Entrance
   from (
      select [Имя], format([ДатаВремя], "yyyy-mm-dd") dt, format([ДатаВремя], "hh:nn") tm
      from tbl) as t
   group by [Имя], dt) as t1
inner join (
   select  [Имя], dt, max(tm) as Leave
   from (
      select [Имя], format([ДатаВремя], "yyyy-mm-dd") dt, format([ДатаВремя], "hh:nn") tm
      from tbl) as t
   group by [Имя], dt) as t2
on t1.[Имя] = t2.[Имя]
   and t1.dt = t2.dt



Как-то так. Написал без проверки (негде), как иллюстрация к идее
...
Рейтинг: 0 / 0
Выбор записей по времени за период
    #39346790
Группировка по Имя и DataValue([ДатаВремя]) , ну и max и min для ДатаВремя, или для TimeValue([ДатаВремя]). или TimeValue применить к результатам max и min.
...
Рейтинг: 0 / 0
Выбор записей по времени за период
    #39346812
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PsylosopherЕсть таблица, выгруженная из БД СКУД, в которой содержатся данные о приходе и уходе сотрудников с работы. Загвоздка заключается в том, что сведения о времени находятся в одном столбце.Значит, халтурно выгружено из СКУД. Потому как ТАМ обязаны быть сведения о том, вход или выход. Надо просто выгружать и их тоже.
...
Рейтинг: 0 / 0
Выбор записей по времени за период
    #39346822
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaхалтурно выгружено из СКУД
Скорее СКУД криво поставлена - используется один датчик на вход и выход.
Вообще с этими данными много нюансов, которые сложно учесть в одном запросе:
- человек выходил, опять зашел и еще на месте - нужно проверять на четность записей.
- отсутствует одна из записей (забыл, не сработало, прошел следом за другим)
- пришел вечером, ушел после 12 и т.п.

Так что таблица будет довольно-таки условная, скорее всего, с ошибками.
...
Рейтинг: 0 / 0
Выбор записей по времени за период
    #39346882
Psylosopher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rivkin Dmitry, Анатолий ( Киев ), спасибо большое! Буду пробовать!

Akina
Я не настолько глуп, чтобы ещё один столбец не суметь выгрузить, если бы он там был, чтобы потом так мучиться. Есть просто файл протокола событий, в том числе ненужных, которых я уже отфильтровал. Название события, дата и время.

MrShin
Единственный датчик - не проблема. Нужно только пришёл/ушел. Количество выходов и входов никому считать не интересно. А для прихода-ухода соответствующие отметки есть. Для того и нужен SQL. Всё это предусмотрено его гибкостью решается на 1-2-3. Просто надо знать как. Вот, Rivkin Dmitry, и Анатолий определенно знают. И спасибо им! :)
...
Рейтинг: 0 / 0
Выбор записей по времени за период
    #39346945
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Psylosopher Название события , дата и время.Приход-уход? вот его и надо выгружать, и на него ориентироваться.
...
Рейтинг: 0 / 0
Выбор записей по времени за период
    #39346996
Psylosopher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, название события: иванов. Вот и ориентируйтесь. :)
...
Рейтинг: 0 / 0
Выбор записей по времени за период
    #39347005
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Psylosopherназвание события: ивановВ первом посте это поле называлось "Имя"... что за СКУД-то такая?

Попробуй

Код: vbnet
1.
2.
3.
SELECT [Имя], MIN([ДатаВремя]) AS [ВремяПрихода], MAX([ДатаВремя]) AS [ВремяУхода]
FROM [Таблица]
GROUP BY Date([ДатаВремя])
...
Рейтинг: 0 / 0
Выбор записей по времени за период
    #39347012
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ааа, это же ж Access... тогда GROUP BY format([ДатаВремя], "yyyymmdd") или типа того.
...
Рейтинг: 0 / 0
Выбор записей по времени за период
    #39364784
Psylosopher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё оказалось намного проще. Может пригодится кому. :)

select имя, min(датавремя) as времяприхода, max(датавремя) as времяухода
from table
group by имя, datevalue(датавремя);
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выбор записей по времени за период
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]