Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282

Запрос с противоположными условиями

28.04.2019, 16:19. Показов 2414. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Существует база с двумя таблицами один ко многим.

Создаю запрос для выборки из главной таблицы записей

по условию (((DateDiff("d",[Дата],Date())))>=26)),

но в то же время мне нужно отсеять записи для которых

верно условие (((DateDiff("d",[Дата],Date())))<=26)).

То есть не выбирать записи главной таблицы для которой верны оба условия в подчиненной.
А только первое.Подскажите как это делается.
SQL
1
2
3
4
SELECT PATIENT.fam, PATIENT.[Год рождения], (DateDiff("d",[Дата],DATE()))
FROM PATIENT LEFT JOIN Направление ON PATIENT.Код = Направление.ID
GROUP BY PATIENT.fam, PATIENT.[Год рождения], (DateDiff("d",[Дата],DATE()))
HAVING ((((DateDiff("d",[Дата посева],DATE())))>=26));
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.04.2019, 16:19
Ответы с готовыми решениями:

Фильтр с противоположными друг другу условиями
Всем доброго дня! Вводная: Есть форма &quot;Фильтр&quot;, в ней 2 диапазона значений (4 поля &quot;от&quot; и &quot;до&quot;). Поле1 -...

Запрос с несколькими условиями
Здравствуйте Уважаемые! Необходимо опять Ваша помощь и вот в чем: Уважаемые знатоки: однажды ученик накидал маленькую учебную базу где...

Запрос с несколькими условиями
Подскажите, пожалуйста Как в одном запросе вывести такую информацию, как на картинке в таблице, то есть: Вертикальный столбец шапки...

13
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
28.04.2019, 16:44
Если правильно понял, то надо во Where фильтровать записи с неподходящим условием. И кстати, DateDiff("d",[Дата],DATE()) в точности равно DATE()-[Дата].
SQL
1
2
3
4
SELECT PATIENT.fam, PATIENT.[Год рождения], DATE()-[Дата]
FROM PATIENT LEFT JOIN Направление ON PATIENT.Код = Направление.ID
WHERE DATE()-[Дата]<=26
GROUP BY PATIENT.fam, PATIENT.[Год рождения], DATE()-[Дата]
Добавлено через 8 минут
Виноват, в фильтре нужен противоположный знак
SQL
1
2
3
4
SELECT PATIENT.fam, PATIENT.[Год рождения], DATE()-[Дата]
FROM PATIENT LEFT JOIN Направление ON PATIENT.Код = Направление.ID
WHERE DATE()-[Дата]<=26 AND DATE()-[Дата посева]>=26
GROUP BY PATIENT.fam, PATIENT.[Год рождения], DATE()-[Дата]
0
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
28.04.2019, 16:58  [ТС]
но в этом случае записи из главной таблицы у которых, в подчиненной таблице присутствуют записи DATE()-[Дата]>=26, и DATE()-[Дата]<=26 все равно попадают в запрос. А мне нужно чтобы выбирались только записи главной таблицы для которых в подчиненной нет DATE()-[Дата]<=26. А так запрос просто выбирает все записи главной таблицы для которых верно условие DATE()-[Дата]>=26.
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
28.04.2019, 17:05
Цитата Сообщение от urman Посмотреть сообщение
А мне нужно чтобы выбирались только записи главной таблицы для которых в подчиненной нет DATE()-[Дата]<=26. А так запрос просто выбирает все записи главной таблицы для которых верно условие DATE()-[Дата]>=26.
Значит надо фильтровать только таблицу Направление (предположу, что даты в именно в ней)
SQL
1
2
3
4
SELECT PATIENT.fam, PATIENT.[Год рождения], DATE()-z.[Дата]
FROM PATIENT LEFT JOIN 
(SELECT * FROM Направление WHERE DATE()-[Дата]>=26) z ON PATIENT.Код = z.ID
GROUP BY PATIENT.fam, PATIENT.[Год рождения], DATE()-z.[Дата]
Если опять не отгадал, выкладывайте фрагмент БД только с необходимыми таблицами и желательно хоть небольшую табличку с правильным результатом.
0
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
28.04.2019, 17:09  [ТС]
Удалите пожалуйста мое предыдущее сообщение. По вашему запросу выбираются записи для которых [Дата] =26.
0
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
28.04.2019, 18:09  [ТС]
Вот пример. Мне нужно чтобы в запрос попали только те фамилии для которых нет дат в таблице "направление" ранее 26 дней от сегодня. То есть чтобы "Иванов" не попадал. пример.zip
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
28.04.2019, 18:22
Цитата Сообщение от urman Посмотреть сообщение
нужно чтобы в запрос попали только те фамилии для которых нет дат в таблице "направление" ранее 26 дней от сегодня. То есть чтобы "Иванов" не попадал.
Вот такой тогда запрос
SQL
1
2
3
4
5
SELECT PATIENT.* 
FROM PATIENT LEFT JOIN 
  (SELECT Направление.ID, Направление.Дата FROM Направление
   WHERE id IN (SELECT id FROM Направление WHERE DATE()-Дата>26)) z ON PATIENT.Код = z.ID
WHERE z.id IS NULL
1
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
28.04.2019, 19:50
Цитата Сообщение от urman Посмотреть сообщение
запрос для выборки из главной таблицы записей
по условию (((DateDiff("d",[Дата],Date())))>=26)),
но в то же время мне нужно отсеять записи для которых
верно условие (((DateDiff("d",[Дата],Date())))<=26))
Что-то скобок многовато...

По вопросу.
Очевидно, что DateDiff("d",[Дата],Date())>=26, но при этом не DateDiff("d",[Дата],Date())<=26
означает просто напросто DateDiff("d",[Дата],Date())>26.
0
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
28.04.2019, 19:56  [ТС]
mobile Вы извините но "Кузнецов" то должен попадать в запрос. У него нет даты ранее 26 дней, а он не попадает. В этом то и проблема.
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
28.04.2019, 20:04
Кузнецов, ID=4. Обе записи в таблице Направление много больше 26 дней от сегодняшней даты
ДатаСегодня-Дата
01.01.2019117
06.12.2018143
1
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
28.04.2019, 20:14  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Кузнецов, ID=4. Обе записи в таблице Направление много больше 26 дней от сегодняшней даты
ДатаСегодня-Дата
01.01.2019117
06.12.2018143
Ооо, я ошибся в формулировке вопроса. Надо было написать позднее.
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
28.04.2019, 20:50
Не уверен, что правильно понимаю задачу. Но предположим, что нужно выбросить из выдачи тех у кого
1. самый ранний срок более чем на 26 дней от сегодня
2. самый поздний срок менее чем на 26 дней от сегодня
Тогда запрос такой (и Кузнецов попадает в выборку)
SQL
1
2
3
4
5
6
7
SELECT PATIENT.* 
FROM PATIENT LEFT JOIN 
(SELECT Направление.ID, Направление.Дата
FROM Направление
WHERE id IN (SELECT id FROM Направление GROUP BY id HAVING MIN(DATE()-дата)<=26 AND MAX(DATE()-дата)>=26)) z
ON PATIENT.Код = z.ID
WHERE z.id IS NULL
Добавлено через 14 минут
Вариант попроще и побыстрее
SQL
1
2
3
4
5
SELECT PATIENT.* 
FROM PATIENT LEFT JOIN 
(SELECT id FROM Направление GROUP BY id HAVING MIN(DATE()-дата)<=26 AND MAX(DATE()-дата)>=26) z
ON PATIENT.Код = z.ID
WHERE  z.id IS NULL
1
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
29.04.2019, 04:52  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Не уверен, что правильно понимаю задачу. Но предположим, что нужно выбросить из выдачи тех у кого
1. самый ранний срок более чем на 26 дней от сегодня
2. самый поздний срок менее чем на 26 дней от сегодня
Тогда запрос такой (и Кузнецов попадает в выборку)
SQL
1
2
3
4
5
6
7
SELECT PATIENT.* 
FROM PATIENT LEFT JOIN 
(SELECT Направление.ID, Направление.Дата
FROM Направление
WHERE id IN (SELECT id FROM Направление GROUP BY id HAVING MIN(DATE()-дата)<=26 AND MAX(DATE()-дата)>=26)) z
ON PATIENT.Код = z.ID
WHERE z.id IS NULL
Добавлено через 14 минут
Вариант попроще и побыстрее
SQL
1
2
3
4
5
SELECT PATIENT.* 
FROM PATIENT LEFT JOIN 
(SELECT id FROM Направление GROUP BY id HAVING MIN(DATE()-дата)<=26 AND MAX(DATE()-дата)>=26) z
ON PATIENT.Код = z.ID
WHERE  z.id IS NULL
mobile объясните пожалуйста как добавить в ваш запрос остальные поля для таблиц присутствующие в моей базе в примере они удалены. Думаю мне проще было бы это сделать без использования алиас.
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
29.04.2019, 06:23
Сохраните запрос и используйте его в других запросах, связывая по полю кода пациента с необходимыми таблицами/запросами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.04.2019, 06:23
Помогаю со студенческими работами здесь

Объединение запрос с условиями в один!
Всем доброго времени суток! Ситуация следующая: Есть таблица (назовем Kv), в ней есть поля - Цена (Назовем P), цена за метр....

Запрос на выборку с двумя условиями
Всем доброго времени суток, столкнулся с проблемой на выборку имеется таблица с основными полями &quot;Код района&quot; &quot;ФИО&quot;...

В процедуре Sub не открывется запрос с условиями
Здравствуйте, коллеги! У меня интересная ситуация. Запрос &quot;УспеваемостьГруппы&quot; открывается с помощью указанного ниже...

sql запрос для БазыДанных с условиями
Уваж Форумчане! Поправьте новичка! Пишу запрос для схемы БД! Дайте пару советов по корректировке! Выбрать все товары по стоимости ниже...

Запрос с условиями
Здравствуйте! Пишу админку для галереи. Всё работает...но хотелось бы сделать всё работало красиво В общем есть 2 таблица в базе, одна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru