|
|
|
| Есть таблица: дата, товар, склад, клиент.
Мне нужно в запросе получить последнюю запись по «дате» из группы «товар»
Если я выбираю из двух полей (товар и дата), то все получается
SELECT Общая.товар, Max(Общая.дата) AS [Max-дата]
FROM Общая
GROUP BY Общая.товар;
Но как только я добавляю третье поле, группировка добавляет новые строки.
Как получить в запросе все четыре поля, но с группировкой по одному полю и MAX по дате из этого поля? | |
|
| |
|
|
|
| как то так
SELECT *
FROM Общая
WHERE Общая.дата IN Max(Общая.дата);
|
| |
|
| |
|
|
|
| 1. ошибка: "невозможно использование статистической функции в предложении WHERE"
2. это не решает проблему, т.к. нет группировки по "товару" | |
|
| |
|
14 Кб. |
|
| В смысле так? Этот вопрос кажется уже решал. | |
|
| |
|
|
|
| По-моему, я уже видел ответ на Ваш вопрос: http://hiprog.com/forum/read.php?id_forum=1&id_theme=6392&page=1, смотрите ответ от osmor в 21.12.2009 в 09:07.
Какие-то проблемы с объединением запросов? Используя конструктор запросов это можно сделать следующим образом:
- создаёте запрос с группировкой и выбором максимальной даты (уже умеете), сохраняете этот запрос и закрываете конструктор, чтобы не отвлекал;
- создаёте запрос в конструкторе, добавляете туда эту же таблицу и только что сохранённый запрос (я думаю, что Access сам создаст нужное объединение), выбираете все необходимые Вам поля.
И, как говорят французы: ву а ля! | |
|
| |
|
|
|
| Да это получается объединенный запрос. То есть на каждую группу получается свой запрос. Потом объединять. Устать можно. А если группа добавится, что тогда? Тут проще надо.
Или я опять че-то не так понял. | |
|
| |
|
|
|
|
(я думаю, что Access сам создаст нужное объединение)
|
к сожалению это не работает! Происходит дублирование полей в геометрической прогрессии.
я уже видел ответ на Ваш вопрос
|
В том ответе предлагалось получать ID последнего перемещения товара.
К сожалению это не работает, т.к.
- либо это третий столбец и результат с добавлением дополнительных строк повторяется,
- либо получая LAST (ID), я не корректно обрабатываю даты. (ввод данных задним числом - ID новое, а дата старая.) | |
|
| |
|
|
|
| Видимо не прошло. Дело в том, что если группировать по всем полям, а каждое разное, то получится все равно несколько строк на каждую группу, так как значения полей разные. А что если делать следующее. Скажем по нажатию на кнопку выходит форма на групповой запрос - группа-товар и макс-дата, а у этой формы будет подчиненная - все остальные поля. | |
|
| |
|
|
|
| Это сделать можно, но цель - в одной таблице ВСЕ последние записи из группы по дате, остается не реализованной. | |
|
| |
|
|
|
| На другом форуме мне подсказали:
SELECT a.*
FROM Общая as a
inner join (SELECT товар, Max(дата) AS [Max-дата] FROM Общая GROUP BY товар) as m
on a.товар=m.товар and a.дата=m.[Max-дата]
|
| |
|
| |
|
|
11 Кб. |
|
| см. аттач
специально разделил на 2 запроса что бы было понятнее | |
|
| |
|
|
|
|
На другом форуме мне подсказали:
SELECT a.*
FROM Общая as a
inner join (SELECT товар, Max(дата) AS [Max-дата] FROM Общая GROUP BY товар) as m
on a.товар=m.товар and a.дата=m.[Max-дата]
|
в случае если товар за один день перемещался более 1 раза, будет дублирование | |
|
| |
|
|
|
| Ну, точно! Я забыл, что надо всё-таки указать условие объединения, для чего придётся переключиться в режим SQL, хотя нет, можно и в конструкторе добавить условие объединения. Хорошо, что на другом форуме подсказали ;-)
в случае если товар за один день перемещался более 1 раза, будет дублирование
|
В результирующем запросе можно просто добавить группировку. | |
|
| |