Прошу помощи в составлении запроса

akxxiv

Новичок
Прошу помощи в составлении запроса

Дико извиняюсь, но торможу. Вечринка вчерашняя...
Короче три таблицы

files
PHP:
 id | file_name | owner
users
PHP:
 id | name | group
downloads
PHP:
file_id | date
Нужно вытащить из таблицы files айдишники всех файлов, принадлежащих пользователю с группой 2 и последняя дата скачивания которых меньше "2007-08-20"

Проблема в условии максимальной даты скачивания. Пробую:
PHP:
SELECT
	`files`.`id`
FROM `files`
LEFT JOIN `downloads` ON `downloads`.`file_id`=`files`.`id`
LEFT JOIN `users` ON `users`.`id`=`files`.`user_id`

WHERE MAX(`downloads`.`date`) <= '2007-08-20'
AND `users`.`group`=2

GROUP BY `files`.`id`
Знаю что MAX в условии неправильно, но не могу придумать как надо...:confused:
 

Zetruger

ivan.chistyakov.name
тут видимо не вечеринка, а что-то более глубинное =)

SELECT
f.id
FROM
users u,
files f,
downloads d
WHERE
(u.group=2) AND
(f.owner=u.id) AND
(d.file_id=f.id) AND
(d.date<='2007-08-20')

попробуй что-то в этом стиле
 

akxxiv

Новичок
От стиля не зависит. Нужно чтобы именно МАКСИМАЛЬНАЯ дата была меньше указанного значения. И f.id не должны повторяться.

to Mr_Max

GROUP BY `files`.`id` именно для этого...
 

akxxiv

Новичок
идентификатор файла-то уникален, но для таблицы files
В downloads может быть много file_id. Собственно можно группировать и по нему, но с тем же результатом.
 

alpine

Новичок
akxxiv
От стиля не зависит. Нужно чтобы именно МАКСИМАЛЬНАЯ дата была меньше указанного значения.
Ты неправильно работаешь с группировкой и фильтром по полю - результатом работы агрегационной функции. Почитай про GROUP BY + HAVING.
 

akxxiv

Новичок
Спасибо за помощь.

рпавильный ответ такой (или что-то типа того)
PHP:
SELECT
f.id
FROM
users u,
files f,
downloads d
WHERE
(u.group=2) AND
(f.owner=u.id) AND
(d.file_id=f.id)
GROUP BY d.file_id
HAVING MAX(d.date)<"2007-08-20"
 
Сверху