Срез последних актуальных значений

Mosik

Новичок
Срез последних актуальных значений

Делаю каталог товаров и наткнулся на небольшую проблему, которую пока не нашел как решить.

Есть таблица товаров:
Код:
id, name
1,  монитор
2,  клавиатура
3,  мышка
Есть таблица активности товаров в зависимости от даты:
Код:
id, products_id, a_date,     active
1,  1,           2005-07-01, 1
2,  1,           2005-07-10, 0
3,  1,           2005-07-20, 1
4,  2,           2005-07-01, 1
5,  2,           2005-07-05, 0
6,  2,           2005-07-09, 1
7,  3,           2005-07-01, 0
8,  3,           2005-07-15, 1
9,  3,           2005-07-18, 0
С помощью какого запроса мне получить состояние активности продукта на конкретную дату.
Т.е. на 2005-07-18 запрос должен вернуть следующее:
Код:
id, products_id, a_date,     active
2,  1,           2005-07-10, 0
6,  2,           2005-07-09, 1
9,  3,           2005-07-18, 0
а на 2005-07-09 должен быть такой результат:
Код:
id, products_id, a_date,     active
1,  1,           2005-07-01, 1
6,  2,           2005-07-09, 1
7,  3,           2005-07-01, 0
Кто-нибуть сталкивался с такой задачей?
Как составть нужный запрос?
 

Romantik

TeaM PHPClub
какая связь утебя даты с активностью? Судя по указанным примерам нет связи.
Ты просишь на конкретную дату а в примере у тебя разные даты.
 

Mosik

Новичок
Romantik
Объясню на примере для мышки:
если я 2005-07-15 установил что продукт активен, то он будет активен до того момента пока не появидся новая запись с большей датой, т.е. 2005-07-18 мышка стала неактивной. Получается что с 2005-07-15 до 2005-07-17 продукт активен а с 2005-07-18 уже неактивен. Вот и вся связь.
 

Romantik

TeaM PHPClub
Mosik
скорей всего задача звучит так: "Выбрать все последние products_id с датой меньше заданной". Так?
 

Romantik

TeaM PHPClub
самое элементарное, что приходит в голову:
Код:
SELECT DISTINCT(products_id), id,a_date,active FROM table WHERE a_date<='2005-07-18' ORDER BY id DESC
проверь, ибо я не уверен оно ли =)
 

chira

Новичок
для MySQL 4.1 нужно использовать подзапрос
Код:
SELECT a.id, a.products_id, a.a_date, a.active
FROM table a
 ,(SELECT products_id, MAX(a_date) a_date
   FROM table 
   WHERE a_date<='2005-07-18' 
   GROUP BY products_id) b
WHERE a.product_id=b.product_id
  AND a.a_date=b.a_date
для версий MySQL 4.0 и меньше нужно использовать временную таблицу
 
Сверху