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

Тема в разделе "Остальные БД", создана пользователем Jas, 9 июн 2006.

Статус темы:
Закрыта.
  1. Jas

    Jas Гость

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

    Barmutik Гость

    Ну так в чём проблема .. если в лоб ... делайте запрос из первой таблицы а в условие подзапрос ко второй таблице с налаганием условий на дату и т.д. и потом проверка подзапроса на количестве записей в нём равном 0.

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

    Код (Text):
    SELECT * FROM Persons P WHERE (SELECT COUNT(*) FROM Times T WHERE T.P_ID = P.P_ID AND Ваши доп условия по датам и т.д) = 0
    Связка таблицы по ключу и условие по дате ... вариант не самый быстрый но работаеть будет...
     
  3. Jas

    Jas Гость

    Чтото у меня ниче не полчуается по тому алгоритму который Вы посоветовали. может можно выложить куда нибудь БД. А Вы тогда посмотрите, что я там не так делал. Или может я что не так объсянил. Но пока ниче не работает. Помогите пожалуйста.
     
  4. Barmutik

    Barmutik Гость

    Ну выложите структуры таблиц .. странно что не работает ...
     
  5. Jas

    Jas Гость

    1 таблица
    iSlotNumber числовой (код работника)
    tEmpName текстовый (ФИО работника)

    2 таблица
    dEvent_Date Дата/время
    dEvent_Time Дата/время
    tEvent_Emp_Code_Num числовой (код работника)
    tEvent_Type_Desc текст (событие двери (Вход или выход))
     
  6. Barmutik

    Barmutik Гость

    Код (Text):
    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 ... вместо них соответственно подставлять нужные Вам значения ...

    Не совсем понятно зачем хранить дату и время двумя полями ?
     
  7. Jas

    Jas Гость

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

    Вот как установить дату когда человек отсутвоал?
     
  8. Barmutik

    Barmutik Гость

    Ааа.. это совсем другая задача ... какой раз убеждаюсь что надо уметь правильно спрашивать....в решении такой задачи одним ANSI SQL не обойдётесь.. или нужно использовать дополнительную таблицу с датами для подзапроса...
     
  9. Jas

    Jas Гость

    Тоесть вы хотите сказать что придеться всетаки писать циклический алгоритм. Но я просто что то смутно себе представляю каким образом я буду фиксировать даты в которые отсутсвовал тот или иной сотрудник.
     
  10. Barmutik

    Barmutik Гость

    Ну одним запросом врядли получится без использования подручных средств .. как вариант создать таблицу со всеми днями(датами).. и потом делать подзапрос к этой таблице для поиска пропусков в основной таблице с датами...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей