Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выборка последних значений в access / 25 сообщений из 28, страница 1 из 2
25.09.2013, 20:14
    #38407724
telefon2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
Добрый день, форумчане!
У меня возникла очень-очень серьезная проблема с БД.
Есть две таблицы excel, связанные с запросами в access.
они обе привязаны друг-к-другу.
Необходимо выбрать по полю [дата] последние значения.
Более подробно исходные данные:
таблица 1:
проект уровень дата
CRM 2 19.04.2012
CRM 3 15.07.2013
BPM 3 12.03.2013
ERP 2 01.01.2012

Таблица 2:
проект владелец
CRM Иванов
BPM Сидоров
ERP Кузнецов

Таблица 1 связана с Таблицей 2 по полю проект со связью один-ко-многим.

В настоящее время, в аксесе, чтобы выделить "последние значения" делал следующее:
включал групповые операции
и выводил следующие столбики
таблица1.проект таблица1.уровень таблица1.дата таблица2.владелец
группировка last last группировка

ДО сегодняшнего дня думал что эти два last'а выберут самые последние значения по дате, но переставив строчку CRM местами неприятно удивился, когда дату мне вывело последнюю, а уровень 2. После этого подумал использовать функцию max, но проблема, что уровень может как повыситься, так и понизиться.

Пожалуйста, посоветуйте как по last(дата) вывести все остальные строчки?

p.s. надеюсь понятно написал, я честно скажу, не спец...
...
Рейтинг: 0 / 0
25.09.2013, 20:44
    #38407743
D>B
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
Три раза раза перечитал , но ничего не понял. А почему бы Вам не отсортировать записи по полю дата о братном порядке, и выбрать столько записей сколько нужно. :)
...
Рейтинг: 0 / 0
25.09.2013, 20:51
    #38407750
telefon2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
D>B,

Фигня что экселевский файлик ведется отдельно одними людьми, а запросы выполняются другими в другой файл-отчет.
Я более глазуально представлю информацию - в картинках ниже.

таблица1
http://funkyimg.com/i/DsxQ.png

таблица2
http://funkyimg.com/i/DsxR.png

как я делал запрос (неверно)
http://funkyimg.com/i/DsxS.png

что он выводил (не то)
http://funkyimg.com/i/DsxT.png


Необходимо, чтобы по проекту CRM он выводил уровень 4, т.к. дата там самая последняя.
...
Рейтинг: 0 / 0
25.09.2013, 20:53
    #38407754
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
telefon2007думал что эти два last'а выберут самые последние значения по датеГлупость ты думал. Что такое, по-твоему, last? Это последняя запись в порядке, в указанном в order by. Не самая большая, не сама маленькая. Просто значение в последней по счёту записи группы. Поскольку ты не указал сортировки, порядок записей в группе в общем отфонарный. В большинстве случаев (но далеко не всегда) это - в порядке возрастания первичного ключа.
...
Рейтинг: 0 / 0
25.09.2013, 20:57
    #38407758
telefon2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
Akina,

ну вот это я сейчас и судорожно понял, что думал-то и неправильно.
Поэтому интересуюсь, как вывести значения (строчки - или как она правильно называется) на последнюю дату?
буду просто нереально благодарен...
...
Рейтинг: 0 / 0
25.09.2013, 21:02
    #38407762
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
telefon2007,

Код: sql
1.
2.
3.
select таблица1.проект, таблица1.уровень, таблица1.дата, таблица2.владелец
from таблица1 inner join таблица2 on таблица1.проект=таблица2.проект
where not exists (select 1 from таблица1 t where таблица1.проект=t.проект and таблица1.дата<t.дата)
...
Рейтинг: 0 / 0
25.09.2013, 21:07
    #38407766
telefon2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
qwerty112,

отрабатывает отлично, только в режим конструктора не дает вернуться.
Нет ли возможности как-то забить столь хитрый запрос через конструктор? :)
p.s. спасибо большое тем не менее!)
...
Рейтинг: 0 / 0
25.09.2013, 21:11
    #38407768
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
telefon2007как вывести значения (строчки - или как она правильно называется) на последнюю дату?Не последнюю, а максимальную. Озаботьтесь всё-таки прочитать описания тех групповых функций, которые пытаетесь использовать с закрытыми глазами.
Далее проделайте следующее.
Этап 1. Вам нужна эта самая максимальная дата для каждого проекта.
Создайте новый запрос. Добавьте туда таблицу данных. Включите групповые операции. Добавьте для вывода два поля. Поле Проект - для него включите группировку. Поле Дата - для него включите групповую операцию Max() - получение максимального значения.
Просмотрите результат... и сохраните этот запрос. Скажем, с именем Запрос1.
Этап 2. Нужно получить записи, в которых содержатся значения из построенного ранее запроса.
Создайте новый запрос. Добавьте туда таблицу данных и только что созданный запрос. Укажите соответствия полей - т.е. мышом перетащите поле имени проекта из таблицы в запрос (или наоборот) - они должны соединиться линией. То же проделайте и с полем даты (у него в запросе, правда, немного иное имя, но это не страшно). Добавьте в поля вывода все поля из таблицы данных.
Просмотрите результат. Должно получиться то, что нужно.
...
Рейтинг: 0 / 0
25.09.2013, 21:11
    #38407770
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
telefon2007qwerty112,

отрабатывает отлично, только в режим конструктора не дает вернуться.

чевой-то ? и что "говорит" ?
...
Рейтинг: 0 / 0
25.09.2013, 21:16
    #38407772
telefon2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
qwerty112,
ан нет, заработал конструктор после замены первых двух строчек
select таблица1.проект, таблица1.уровень, таблица1.дата, таблица2.владелец
from таблица1 inner join таблица2 on таблица1.проект=таблица2.проект

на

SELECT таблица1.Проект, таблица1.уровень, таблица1.Дата, таблица2.Владелец
FROM таблица1 LEFT JOIN таблица2 ON таблица1.Проект = таблица2.Проект

(почему так - без понятия)
...
Рейтинг: 0 / 0
25.09.2013, 21:18
    #38407773
telefon2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
Akina,

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

Тем не менее, спасибо всем за помощь! буду курить как отрабатывает эта хитрость:
WHERE (((Exists (select 1 from таблица1 t where таблица1.проект=t.проект and таблица1.дата<t.дата))=False));
...
Рейтинг: 0 / 0
25.09.2013, 21:22
    #38407776
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
telefon2007Хочется чтобы без вложенных запросов
А решение qwerty112 без них, по-твоему?

telefon2007и в один заходГовно вопрос, собери два полученных запроса в один.
...
Рейтинг: 0 / 0
25.09.2013, 21:27
    #38407777
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
telefon2007 Простейшую операцию выполнять в два присяда. Хочется чтобы без вложенных запросов и в один заход, но, к сожалению, кажется такого не возможно.

без вложенного запроса так можна
Код: sql
1.
2.
3.
4.
SELECT таблица1.Проект, таблица1.уровень, таблица1.Дата, таблица2.Владелец
FROM (таблица1 INNER JOIN таблица2 ON таблица1.Проект = таблица2.Проект)
left join таблица1 t on таблица1.Проект=t.Проект and таблица1.Дата<t.Дата
where t.Проект is null


но этот - точно в конструкторе не откроется ...
...
Рейтинг: 0 / 0
25.09.2013, 22:04
    #38407795
telefon2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
qwerty112,
Akina,

Спасибо Вам всем, ребята!
В общем, пришел к выводу, что на тот момент, пока мои знания не поднимутся до уровня qwerty112 - буду пользоваться системой "миллион запросов" - которую предложил пользователь Akina.

Выражаю огромную благодарность за то, что просто показали мне, что либо ты хорошо знаешь SQL и не_пользуешься конструктором - делаешь быстро и четко
либо ты делаешь конструктором, но с кучей "вспомогательных" запросов :)8
...
Рейтинг: 0 / 0
25.09.2013, 22:40
    #38407832
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
telefon2007либо ты делаешь конструктором, но с кучей "вспомогательных" запросов
Урок номер два.

У тебя имеется два ранее созданных запроса. Запрос1 и Запрос2.

Открой конструктор Запроса1. Переключи его в режим SQL. Скопируй весь его текст, кроме последнего символа (точки с запятой).
Открой конструктор Запроса2. Переключи его в режим SQL. Найди секцию FROM, а в ней - упоминание запроса Запрос1. Допиши перед ним несколько символов, чтобы получилось

() AS Запрос1

Поставь курсор внутрь скобок. Вставь туда из буфера обмена текст перовго запроса. Сохрани полученный текст с именем Запрос3. Удали первые два запроса. Убедись, что одиночный запрос работает и даёт верные результаты.
...
Рейтинг: 0 / 0
26.09.2013, 08:27
    #38407991
D.B
D.B
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
telefon2007буду пользоваться системой "миллион запросов" - которую предложил пользователь Akina.

Запросы с подзапросами , или система "миллион запросов" как Вы ее называете , который предложил Akina еще не означает , что этот вариант хуже того что предложил qwerty112 . Запросы с подзапросами иногда могут выполняться и быстрее , чем вариант с множествами джойнов с условиями. Так что всегда нужно выбирать оптимальный вариант.
P.S А вот для того чтобы подняться до уровня qwerty112 нужно мучиться долго и упорно. ))
...
Рейтинг: 0 / 0
26.09.2013, 11:19
    #38408146
telefon2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
Ребят, а хотел бы еще один вопрос спросить. Реализовал решение выше через дополнительный запрос, который отбирает max(дата) и привязал полученный запрос по процессу и дате к таблице1.
Хочется еще, чтобы в начале выводился порядковый номер строки. В интернете нашел запрос. Попытался его под себя передалть, но вываливает ошибку. "не удалось найти имя <имя> из этого выражения"

Как выглядит запрос в конструкторе:
DCount("[вспомог_таблица].[проект]"; "[вспомог_таблица]";"[вспомог_таблица].[проект]<=" & [вспомог_таблица].[проект].[процесс])


Может кто знает, что стоит переделать в запросе или знает о существовании какой-нибудь очевидной функции типо RowNumber?
Спасибо!
...
Рейтинг: 0 / 0
26.09.2013, 13:25
    #38408357
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
См. ФАК про счетчики
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
10.10.2017, 11:36
    #39533920
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
А можно тему поднять? У меня запрос конечно с двумя таблицами, но не работает именно выборка по последней дате, подскажите, что делать, пожалуйста.
Код: plsql
1.
2.
3.
SELECT Comment.[Код заявки], Comment.com, Max(Comment.date_com) AS [Max-date_com]
FROM Comment
GROUP BY Comment.[Код заявки], Comment.com;


И проблема еще в том, что у меня на один день может приходиться несколько записей, как выбрать именно последнюю? Хотя, до этого и не доходит, у меня выпадают записи по непонятному принципу, они вроде бы и не все, но явно не отбирается последняя дата.

Спасибо.
...
Рейтинг: 0 / 0
10.10.2017, 14:46
    #39534088
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
Решение по последним датам нашел:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT Comment.[Код заявки], Comment.com,  Comment.date_com
FROM (SELECT
    [Код заявки]
    ,Max(date_com) AS lastdate
  FROM Comment
  GROUP BY [Код заявки]
 ) AS lastc
INNER JOIN Comment ON Comment.[Код заявки] = lastc.[Код заявки] and Comment.date_com = lastc.lastdate


А как теперь быть, если по дате несколько комментариев, а мне нужен последний?
...
Рейтинг: 0 / 0
10.10.2017, 16:55
    #39534216
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
Stang,
а что мешает добавить еще одно поле в таблицу,сделать его скрытым на форме и писать в него,при сохранении записи, now
в запросе TOP 1 с order by desc по этому полю выведет последнюю запись
...
Рейтинг: 0 / 0
11.10.2017, 11:46
    #39534527
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
sdku, для этого надо менять структуру. Да и проблема в том, что в основном эти данные подтягиваю с Excel.
...
Рейтинг: 0 / 0
11.10.2017, 12:01
    #39534542
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
В принципе, я поступил так, все равно это у меня подчиненный запрос, а в основном по связи один-к-одному у меня и выпадает одна запись. Правда, по какому принципу еще не разобрался, но там это не глобально страшно, в один день статус резко измениться не может.
...
Рейтинг: 0 / 0
12.10.2017, 11:29
    #39535264
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
Stang,

Нашел пробел в своем решении, если к записи нет комментария, то она вообще выпадает.... Как бороться?
...
Рейтинг: 0 / 0
04.01.2018, 13:38
    #39579332
Vandervise
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка последних значений в access
Добрый день, у меня похожая проблема имеется таблица
Код региона | ФИО | ИНН | Дата регистрации
1020 |Петров | 123 | 04,10,2017
1020 |Петров | 123 | 10,08,2014
1030 |Сидоров| 321 | 09,01,2012
1030 |Сидоров| 311 | 12,11,2017

Все данные в таблице а именно ФИО и ИНН дублируются но при этом у них могут меняться регионы и дата регистрации как мне вывести 1 запись по каждому ФИО с самой последней датой? (Для петрова это 04,10,2017; Для Сидорова 12,11,2017)
Буду очень благодарен!!
PS: Если убираю с таблицы столбец с регионом то все работает как надо через фун. min-max на дате но при наличии региона выдает дату на каждый регион.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выборка последних значений в access / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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