venetu
Мой дом здесь!
- Регистрация
- 28 Мар 2007
- Сообщения
- 745
- Реакции
- 273
- Автор темы
- #1
Есть таблица
id, products_id, price, date
В которой записаны цены на продукты. У каждого продукта - несколько цен, в зависимости от даты. Актуальна всегда последняя цена (с самым большим date), прошлые хранятся для истории. Цены меняются далеко не ежедневно, т.е. не для каждой даты есть соотв. запись в таблице.
Задача: селектнуть самые новые цены.
причем так, чтоб потом в этот запрос еще можно было вставить WHERE `date` < '2009-01-01', т.е. "последние(актуальные) цены по состоянию на такое-то число"
Я подозреваю, что тут надо копать в сторону HAVING, но
SELECT products_id, price, date FROM table GROUP BY products_id HAVING date=MAX(date) нужного результата не дает. Наверное, MAX() считается по всей таблице, а не для каждого products_id отдельно.
Короче в более общем случае можно сформулировать так - как сказать мускулу, чтоб при GROUP BY он из группы оставил конкретный какой-то ряд (в моем случае - запись с максимальным date).
id, products_id, price, date
В которой записаны цены на продукты. У каждого продукта - несколько цен, в зависимости от даты. Актуальна всегда последняя цена (с самым большим date), прошлые хранятся для истории. Цены меняются далеко не ежедневно, т.е. не для каждой даты есть соотв. запись в таблице.
Задача: селектнуть самые новые цены.
причем так, чтоб потом в этот запрос еще можно было вставить WHERE `date` < '2009-01-01', т.е. "последние(актуальные) цены по состоянию на такое-то число"
Я подозреваю, что тут надо копать в сторону HAVING, но
SELECT products_id, price, date FROM table GROUP BY products_id HAVING date=MAX(date) нужного результата не дает. Наверное, MAX() считается по всей таблице, а не для каждого products_id отдельно.
Короче в более общем случае можно сформулировать так - как сказать мускулу, чтоб при GROUP BY он из группы оставил конкретный какой-то ряд (в моем случае - запись с максимальным date).