Выборка несуществующих записей из таблицы

  • Автор темы Автор темы Jas
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
J

Jas

Вот какая тема.... Есть две таблицы, в первой содержаться код карты работника и ФИО. Во второй содержеться ряд событий. Систематакая когда человек проходит он карточку проносит перед сканером, сканер считывает код карты, время, дату и событие двери (вход или выход). Все эти события заносятся во вторую таблицу. Задача такая вычислить кто не пришел на работу допустим за неделю. Я чтото смутно представляю как это сделать. Пробовал через обычный запрос, но ничего не получается так как если работнк не приходил то и событий не было. Может у кого появиться мысль, помогите пожалуйста.
 
Ну так в чём проблема .. если в лоб ... делайте запрос из первой таблицы а в условие подзапрос ко второй таблице с налаганием условий на дату и т.д. и потом проверка подзапроса на количестве записей в нём равном 0.

Что-то а ля такого:

Код:
SELECT * FROM Persons P WHERE (SELECT COUNT(*) FROM Times T WHERE T.P_ID = P.P_ID AND Ваши доп условия по датам и т.д) = 0

Связка таблицы по ключу и условие по дате ... вариант не самый быстрый но работаеть будет...
 
Чтото у меня ниче не полчуается по тому алгоритму который Вы посоветовали. может можно выложить куда нибудь БД. А Вы тогда посмотрите, что я там не так делал. Или может я что не так объсянил. Но пока ниче не работает. Помогите пожалуйста.
 
Ну выложите структуры таблиц .. странно что не работает ...
 
1 таблица
iSlotNumber числовой (код работника)
tEmpName текстовый (ФИО работника)

2 таблица
dEvent_Date Дата/время
dEvent_Time Дата/время
tEvent_Emp_Code_Num числовой (код работника)
tEvent_Type_Desc текст (событие двери (Вход или выход))
 
Код:
SELECT * FROM Table1 T1 WHERE (SELECT COUNT(*) FROM Table2 T2 WHERE T1.iSlotNumber = T2.tEvent_Emp_Code_Num AND T2.dEvent_Date >= StartDate AND T2.dEvent_Date <= EndDate) = 0

Покажет список кого не было в интервале между StartDate and EndDate ... вместо них соответственно подставлять нужные Вам значения ...

Не совсем понятно зачем хранить дату и время двумя полями ?
 
структура была уже готовая. поэтому не могу ответить на ваш вопрос. тут еше проблема в том что отчет должен выводиться в формате типо такого:
ФИО Дата отсутвия

Вот как установить дату когда человек отсутвоал?
 
Ааа.. это совсем другая задача ... какой раз убеждаюсь что надо уметь правильно спрашивать....в решении такой задачи одним ANSI SQL не обойдётесь.. или нужно использовать дополнительную таблицу с датами для подзапроса...
 
Тоесть вы хотите сказать что придеться всетаки писать циклический алгоритм. Но я просто что то смутно себе представляю каким образом я буду фиксировать даты в которые отсутсвовал тот или иной сотрудник.
 
Ну одним запросом врядли получится без использования подручных средств .. как вариант создать таблицу со всеми днями(датами).. и потом делать подзапрос к этой таблице для поиска пропусков в основной таблице с датами...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!