Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
647 / 100 / 11
Регистрация: 08.06.2015
Сообщений: 1,564
1

Сложный запрос на выборку

02.06.2018, 04:56. Показов 934. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго утра, помогите сделать сложный запрос на выборку. В наведенном примере отображена таблица изменений поля. Нужно найти последнее изменение записи и вывести RecordID, ChangeDate, NewValue.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2018, 04:56
Ответы с готовыми решениями:

сложный запрос (для меня сложный)
Есть таблица с продажами услуг от разных фирм, есть таблица с оплатой за предоставленные услуги...

Если нужно сделать запрос на добавление, зачем предварительно делать запрос на выборку?
Есть таблица: ID_записи, поле1, поле2, поле3. Хотелось бы записать запрос на добавление записи с...

сложный запрос
Народ создал БД на тему экзаменирования студентов. задание создать БД в табличном представлении,...

Сложный запрос
Помогите пожалуйста создать сложный запрос, нужно получить выборку со столбцами...

7
647 / 100 / 11
Регистрация: 08.06.2015
Сообщений: 1,564
02.06.2018, 04:56  [ТС] 2
Вложил БД.
Вложения
Тип файла: rar Database60.rar (14.7 Кб, 3 просмотров)
0
647 / 100 / 11
Регистрация: 08.06.2015
Сообщений: 1,564
02.06.2018, 05:16  [ТС] 3
Кроме всего нужно проверить есть ли записи NewValue = 5. Сделал через 3 запроса. Вопрос знатокам если таблица будет большая, то такой тройной запрос будет долго выполняться? Можно его как-то сократить?
Вложения
Тип файла: rar Database60.rar (18.7 Кб, 5 просмотров)
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
02.06.2018, 07:00 4
Цитата Сообщение от alexpro1979 Посмотреть сообщение
Нужно найти последнее изменение записи и вывести RecordID, ChangeDate, NewValue.
Возможны 2 понимания при данной постановке:
1. Найти максимальное значение ChangeDate и, если NewValue=5 в выбранной строке, то выполнить. SQL такого запроса (Запрос5)
SQL
1
2
3
SELECT RecordID, ChangeDate, NewValue
FROM (SELECT  top 1 * FROM Audit ORDER BY ChangeDate DESC) z
WHERE NewValue=5
2. Искать максимальное значение ChangeDate только в наборе где NewValue=5 (Запрос4)
SQL
1
2
3
4
SELECT top 1 RecordID, ChangeDate, NewValue
FROM Audit
WHERE NewValue=5
ORDER BY ChangeDate DESC
Какой вариант правильный решать Вам.
Вложения
Тип файла: rar Database60.rar (17.2 Кб, 5 просмотров)
1
647 / 100 / 11
Регистрация: 08.06.2015
Сообщений: 1,564
02.06.2018, 07:11  [ТС] 5
Нужно проверить если последним действием было присвоено NewValue = 5, то в записи с найденным RecordID нужно произвести обновление.

Добавлено через 53 секунды
Другими словами, если поставили статус с кодом 5 и в течении 5 рабочих дней он не изменился, нужно поставить статус с кодом 9 - просрочка.

Добавлено через 2 минуты
Я пытаюсь поймать последнее NewValue по дате для каждого RecordID
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
02.06.2018, 07:45 6
Правильно ли я понял? Поправьте если не так
1. Для каждого RecordID ищем NewValue = 5
2. Если найденная запись с максимальным значением ChangeDate для заданного RecordID, то в поле NewValue пишем 9 для найденной записи.

Цитата Сообщение от alexpro1979 Посмотреть сообщение
Другими словами, если поставили статус с кодом 5 и в течении 5 рабочих дней он не изменился, нужно поставить статус с кодом 9 - просрочка.
Этого я не понял. И это условие противоречит всем остальным. Получается надо найти не последнее, а ПРЕДпоследнее значение с NewValue=5 и, если дата самого последнего отличается от предпоследнего на 5 дней, то менять статус. Где правда?
1
647 / 100 / 11
Регистрация: 08.06.2015
Сообщений: 1,564
02.06.2018, 09:38  [ТС] 7
Нужно найти последнее по дате для каждого RecordID, если по последней дате стоит NewValue = 5 оставить. Другими стовами если последний установленный статус с NewValue = 5 все остальное игнорировать. Например был NewValue = 5, а потом стал 3 - этот RecordID не нужен.
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
02.06.2018, 12:20 8
Может быть так?
SQL
1
2
3
4
5
6
7
SELECT Audit.RecordID, ChangeDate, NewValue 
FROM Audit INNER JOIN 
(SELECT RecordID, MAX(ChangeDate) AS mx
FROM Audit
GROUP BY RecordID) z
ON Audit.RecordID=z.RecordID AND Audit.ChangeDate=z.mx
WHERE NewValue=5
1
02.06.2018, 12:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2018, 12:20
Помогаю со студенческими работами здесь

Сложный запрос
Нужно создать запрос, который подсчитает общий доход за указанный интервал времени. Начальная и...

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

сложный запрос(!)
всем привет! подскажите пожалуйста как реализовать такой запрос: 1. таблица "профессия":...

Сложный запрос на БД
Привет всем. Возник вопрос которые сам не смог решить. Есть запрос t7 в этой запросе добавить...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru