2013-04-01 8 views
0

У меня есть некоторые проблемы с запросом SQL:SQL заказ по и группа по

SELECT DISTINCT b . * 
FROM follow a 
INNER JOIN position b 
    ON a.user_id = b.follow_id 
INNER JOIN referent_follow c 
    ON a.user_id = c.follow 
WHERE c.referent = 14 
GROUP BY b.follow_id 
ORDER BY b.date DESC 

Этот запрос работает. Я добавляю группу из-за того, что я не хочу иметь тот же результат follow_id в результате. Это работает, у меня никогда не было такого же follow_id в ответе, но для каждого follow_id запрос возвращает первый, и я хотел бы получить последний (упорядочить по дате desc)

Добавление порядка по дате desc с этой целью это заказ на конечный результат, а не follow_id выбрать

Благодаря

ответ

1

Если вы хотите, чтобы вернуть max(date), то вы можете использовать подзапрос:

SELECT b.* 
FROM follow a 
INNER JOIN position b 
    ON a.user_id = b.follow_id 
INNER JOIN 
(
    select max(date) MaxDate, follow_id 
    from position 
    group by follow_id 
) b1 
    on b.follow_id = b1.follow_id 
    and b.date = b1.MaxDate 
INNER JOIN referent_follow c 
    ON a.user_id = c.follow 
WHERE c.referent = 14 
ORDER BY b.date DESC 

подзапрос возвращает max(date) для каждого follow_id, а затем присоедините этот результат к таблице position, чтобы вернуть оставшиеся данные из таблицы position.

+0

Это работает спасибо, я понимаю – Ajouve

1

Что-то вроде этого будет работать.

select JustTheFieldsYouNeed, max(datefield) maxdate 
from follow a join position b a.user_id = b.follow_id 
join referent_follow c on a.user_id = c.follow 
where c.referent = 14 
group by JustTheFieldsYouNeed 

Если вам действительно нужно каждое поле с позиции, введите их.

+0

есть проблема, но другой запрос работает – Ajouve