私は2つのテーブルがあります。これは、SQL文が正常に一人のユーザに最後のメッセージを取得しネストされたクエリ、サブクエリSQL
select * from friends;
user_id | friend_id | created_at
---------+-----------+----------------------------
user | user2 | 2017-01-09 21:29:56.31972
user | user3 | 2017-01-09 21:29:58.567925
user | user4 | 2017-01-09 21:30:01.200806
user2 | user | 2017-01-09 21:30:49.498912
user3 | user | 2017-01-09 21:30:53.549042
user4 | user | 2017-01-09 21:30:56.519135
id | user_id | user_from | message
----+---------+-----------+---------
1 | user | user2 | hey
2 | user | user3 | de
3 | user | user4 | bal
4 | user | user3 | ok
5 | user | user3 | nice
6 | user | user4 | cana
7 | user | user2 | doc
を。例えば。
select id, user_from, message
from messages
WHERE user_id = 'user'
AND user_from = 'user3'
ORDER BY id DESC
limit 1;
id | user_from | message
----+---------+---------
5 | user3 | nice
ユーザー
にユーザー3によって送信された最後のメッセージは、私は、メッセージのコレクションを取得する必要があります。各メッセージは、ユーザーに友人から送られた最後のメッセージを表し私はこの
id | user_from | message
----+-----------+---------
7 | user2 | doc
5 | user3 | nice
6 | user4 | cana
これは動作しませんでした:ERRORを: 表現BY LINE 1初期ORDERと一致する必要があります式にDISTINCT SELECT:(user_from)ID、user_from ON DISTINCTを選択し、メッセージ – user1000622
を、私は次のようにクエリを変更...選択DISTINCT ON(user_from)id、user_from、メッセージ メッセージfrom user_id = 'user' AND user_from = 'user3' ORDER BY user_from、id DESC; id: user_from |メッセージ ---- + ----------- + --------- 5 |ユーザー3 | nice – user1000622
しかし、私は欲しいものを達成できません。 1行だけを取得します – user1000622