Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2015, 18:41   #1
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию Как вытянуть последние записи (по дате) уникальные по столбцу

Добрый день!

PRODUCT_ID - ID товара
PARENT_ID - ID группы товара (детские коляски, детские игрушки и т.д.)
PRICE_DATE - дата добавления записи (за 1 день к одному и тому же товару 2-х записей быть не может)
PRICE - цена товара на PRICE_DATE число

Подскажите, как из такой таблицы (см. картинку) получить последние по дате записи товары из группы 1.
По факту нужны строки (все поля) ID = 8 и 13 (это последние цены товаров группы 1)

0_o
MyIE вне форума Ответить с цитированием
Старый 13.02.2015, 18:42   #2
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Забыл добавить - MS Access 2002-2003
Работаю с базой в программе на Delphi через ADO

Но мне хотя бы в аккесе такой запрос построить
0_o

Последний раз редактировалось MyIE; 13.02.2015 в 18:43. Причина: дополнил
MyIE вне форума Ответить с цитированием
Старый 13.02.2015, 18:46   #3
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

см. group by + max()
lomastr_ вне форума Ответить с цитированием
Старый 13.02.2015, 18:54   #4
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Умоляю, напишите, если знаете как построить запрос.

Сам я знаю как работает group by, да вот только в аккесс он должен быть на все выбираемые поля, а соответственно группировки не получается, т.к. если группировка по всем полям, то он должен возвращать все.

Гуглю со среды, ничего так и не насоображал. Сюда решил написать уже от безисходностти.

Прикол еще в том, что в вебе такой запрос я без проблем составил, а вот у Аккесс какие то свою тараканы в голове.

Такой запрос
Код:
select
t1.ID,
t1.PRODUCT_ID,
t1.PARENT_ID,
t1.PRICE_DATE,
t1.PRICE
from table2 as t1
where t1.PARENT_ID=1
GROUP BY t1.PRODUCT_ID
выдает
Цитата:
Попытка выполнить запрос, который не включает указанное выражение 'ID' как часть статистической функции или группы

Вот так:
Код:
select
max(t1.ID),
t1.PRODUCT_ID,
max(t1.PARENT_ID),
max(t1.PRICE_DATE),
max(t1.PRICE)
from table2 as t1
where t1.PARENT_ID=1
GROUP BY t1.PRODUCT_ID
выдает неверные записи, т.к. max на каждое поле рассчитывается

Добавлю, что возможен еще и вот такой вариант



И тогда нужно получить записи ID = 8 и 19
0_o

Последний раз редактировалось Stilet; 13.02.2015 в 23:41.
MyIE вне форума Ответить с цитированием
Старый 13.02.2015, 22:30   #5
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Цитата:
Прикол еще в том, что в вебе такой запрос я без проблем составил, а вот у Аккесс какие то свою тараканы в голове.
что значит в вебе?
lomastr_ вне форума Ответить с цитированием
Старый 14.02.2015, 01:54   #6
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

на веб-сайте
0_o
MyIE вне форума Ответить с цитированием
Старый 14.02.2015, 10:16   #7
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

откуда на веб-сайте sql?
lomastr_ вне форума Ответить с цитированием
Старый 14.02.2015, 10:42   #8
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Вернемся к теме вопроса, пожалуйста.
Подскажите, плиз, решение задачи, а то всю голову уже сломал.
0_o
MyIE вне форума Ответить с цитированием
Старый 14.02.2015, 12:01   #9
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

select * from table2 as t2
inner join (select PRODUCT_ID, max(PRICE_DATE) as PRICE_DATE from table2 where PARENT_ID=1 group by PRODUCT_ID) as t on t.PRODUCT_ID=t2.PRODUCT_ID and t.PRICE_DATE=t2.PRICE_DATE
where PARENT_ID=1

сойдет?

Последний раз редактировалось lomastr_; 14.02.2015 в 12:08.
lomastr_ вне форума Ответить с цитированием
Старый 14.02.2015, 14:36   #10
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Огромное спасибо! Могу я вам где то репутацию кликнуть?)
Вообще никогда не приходилось делать join таблицы в саму себя

В вебе такое прокатывает без проблем (субд mysql)

0_o
MyIE вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выбрать поле таблиции по предпоследней дате записи? Женя32 БД в Delphi 9 11.11.2013 22:42
Как обновить последние записи за определенный срок не обновляя не законченные записи? SotGEGDS SQL, базы данных 3 11.06.2013 14:39
MySQL уникальные записи Abuhamed PHP 3 15.12.2011 14:11
Уникальные записи из БД Abuhamed PHP 5 01.07.2011 01:55
Запрос на последние записи SERG1980 БД в Delphi 5 17.11.2010 17:02