2013-04-01 209 views
0

我有一些問題與SQL請求:SQL ORDER BY和GROUP BY

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在這一端this訂購的最終結果,而不是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