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

このリクエストは機能します。結果に同じ follow_id が必要ないため、group by を追加します。これは機能します。応答に同じ follow_id があることはありませんが、各 follow_id に対して、要求は最初のものを返し、最後のものを取得したいと思います (日付順)

この最後に日付順による順序を追加すると、この順序は最終結果であり、選択するfollow_idではありません

ありがとう

4

2 に答える 2

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 に答える
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 に答える