sql order by和group by

时间:2013-04-01 19:45:20

标签: mysql sql sql-order-by

我在使用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。这工作我在reponse中从来没有相同的follow_id但是对于每个follow_id,请求返回第一个并且我想获得最后一个(按日期desc排序)

在此结束时按日期desc添加订单,此订单为最终结果,而不是follow_id以选择

由于

2 个答案:

答案 0 :(得分: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表中的剩余数据。 / p>

答案 1 :(得分: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

如果你确实需要从位置开始的所有领域,请输入它们。