powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / хитрый запрос
9 сообщений из 9, страница 1 из 1
хитрый запрос
    #39597682
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
Появился одна небольшая проблема с формированием запроса , без использования VBA нужно. Частично нашел решение, но дальше мысль не пошла. В общем представим что есть небольшая табличка, в которой ведется учет выдачи прав.
С полями ФИО, ДатаВыдачи, НомерУдостов .
Один и тот же человек может менять права несколько раз, причем последние могут оказаться действующими и не закрытыми.

Запрос должен выводить следующие значения полей:
ФИО, НомерУдостоверения, действуетС, действуетПО.

По каждой последней выдаче в рамках ФИО должно выводится "действительны на текущий момент"

Стал раскручивать логику и немного запутался, вот что есть на текущий момент:
Код: sql
1.
2.
3.
SELECT Таблица1.ФИО, Таблица1.НомерУдостов, (SELECT TOP 1 Таблица2.ДатаВыдачи FROM Таблица1 AS Таблица2 WHERE  Таблица2.ДатаВыдачи <Таблица1.ДатаВыдачи  AND Таблица2.ФИО=Таблица1.ФИО  ORDER BY  Таблица2.ДатаВыдачи DESC) AS действуетС, Таблица1.ДатаВыдачи AS ДействуетПО
FROM Таблица1
ORDER BY Таблица1.ДатаВыдачи;
...
Рейтинг: 0 / 0
хитрый запрос
    #39597701
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
SELECT T1.ФИО, T1.НомерУдостов, T1.ДатаВыдачи AS действуетС, 
       Nz((SELECT TOP 1 ДатаВыдачи 
           FROM Таблица1 AS T2 
           WHERE T2.ФИО=T1.ФИО AND T2.ДатаВыдачи>T1.ДатаВыдачи  
           ORDER BY ДатаВыдачи),"действительны на текущий момент") AS действуетПО
FROM Таблица1 AS T1
...
Рейтинг: 0 / 0
хитрый запрос
    #39597708
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,
Отлично, спасибо за вариант, NZ в самую точку! А я полез уже было в IIF и ISnull )
...
Рейтинг: 0 / 0
хитрый запрос
    #39597727
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У действующего удостоверения поле "действуетПО" пустое и пользовательская функция с Dlookup отберет для конкретного работника удостоверение с пустым полем (действующее)
...
Рейтинг: 0 / 0
хитрый запрос
    #39597729
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

Только, наверное, нужно чуть подправить, чтобы даты действуетПО и действуетС для двух последовательных выдач не были равны.
То есть, день действуетПО должен быть на единицу меньше следующей даты действуетС.
Код: sql
1.
2.
3.
4.
5.
6.
SELECT T1.ФИО, T1.НомерУдостов, T1.ДатаВыдачи AS действуетС, 
       Nz((SELECT TOP 1 ДатаВыдачи 
           FROM Таблица1 AS T2 
           WHERE T2.ФИО=T1.ФИО AND T2.ДатаВыдачи>T1.ДатаВыдачи  
           ORDER BY ДатаВыдачи)-1,"действительны на текущий момент") AS действуетПО
FROM Таблица1 AS T1
...
Рейтинг: 0 / 0
хитрый запрос
    #39597732
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuУ действующего удостоверения поле "действуетПО" пустоеТакого поля просто нет.
Совсем.
Для любого удостоверения.
...
Рейтинг: 0 / 0
хитрый запрос
    #39597737
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,
Ну это если мы берем настоящие права, так то да, если продолжать логику, то можно написать запрос с учетом этого и с проверкой, что они должны выдаваться новые раз в 10 лет. Либо если утеряны и выданы раньше, выводить дополнительную информацию в комментарий. Вы правы, спасибо)
Мне в данном случае просто пример запроса к предыдущим строкам понадобился. Ваш первый вариант выводит всё что нужно,спс)
...
Рейтинг: 0 / 0
хитрый запрос
    #39597829
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__MichellesdkuУ действующего удостоверения поле "действуетПО" пустоеТакого поля просто нет.
Совсем.
Для любого удостоверения.Вопрос ТСу: как узнать дату выдачи (продления срока действия)если не хранить в БД эти данные ???
...
Рейтинг: 0 / 0
хитрый запрос
    #39597830
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuВопрос ТСу: как узнать дату выдачи (продления срока действия)если не хранить в БД эти данные ???

В смысле как узнать дату выдачи?)

Дата выдачи есть в таблице, на основании которой мы и делаем запрос.

В первом сообщении от меня в данном топике ,в постановке задачи:

.. В общем представим что есть небольшая табличка, в которой ведется учет выдачи прав.
С полями ФИО, ДатаВыдачи, НомерУдостов..


Уже разобрались, спасибо, помогли)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / хитрый запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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