0

我对 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

这个请求有效。我添加了一个 group by 因为我不希望结果中有相同的 follow_id。这工作我在响应中从来没有相同的 follow_id 但是对于每个 follow_id 请求返回第一个,我想得到最后一个(按日期顺序排序)

在此末尾添加按日期顺序排列的顺序,此顺序是最终结果,而不是要选择的 follow_id

谢谢

4

2 回答 2

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)for each follow_id,然后您将该结果连接回position表以返回表中的剩余数据position

于 2013-04-01T19:49:30.393 回答
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

如果您确实需要位置的每个字段,请输入它们。

于 2013-04-01T19:56:43.417 回答