私はpostgresqlでこのクエリを実行する最良の方法を理解しようとしています。私はメッセージテーブルを持っていて、ユーザーが各別のユーザーから受け取った最後のメッセージを取得したい。私は行からすべてを選択する必要があります。別の列で異なる結果を得るにはどうすればよいですか? SQL Postgresql
私は送信者ID "msgfromid"でグループ化したい場所だと思うでしょうが、私はこれを実行すると私のselectステートメントから私のグループステートメントのすべてを含んでいないと文句を言いますが、 1つの列でグループ化し、すべてではありません。だから私が1つの列にDistinctを使用しようとすると、最初に必要な正しい行を得ることができなくなる(「msgfromid」)送信者 "msgsenttime")。
私の目標は、サーバーとデータベースでできるだけ効率的にすることです。
これは私が現在行っているもので、動作していません。 I事前に注文したそれらのサブクエリでそれがうまくいくならば、私は多分考え
SELECT DISTINCT ON ("msgfromid") "msgfromid", "msgid", "msgtoid", "msgsenttime", "msgreadtime", "msgcontent", "msgreportstatus", "senderun", "recipientun"
FROM "messages"
WHERE "msgtoid" = ?
ORDER BY "msgsenttime" desc, "msgfromid"
(これは、私はその後、関連する情報を結合するために使用しますが、私はそれは無関係です把握別のクエリのサブクエリである)、それただランダムにとにかくものを選ぶようだ、と私はで開始するすべてのメッセージを引き出していますので、これは、それが動作したとしても、右の非常に効率的にすることはできません?:任意の助け
SELECT DISTINCT ON ("msgfromid") "msgfromid", "msgid", "msgtoid", "msgsenttime", "msgreadtime", "msgcontent", "msgreportstatus", "senderun", "recipientun"
FROM
(
SELECT * FROM "messages"
WHERE "msgtoid" = ?
ORDER BY "msgsenttime" desc
) as "mqo"
感謝。
私はそれを正確にしたが、それは動作しませんでしたが、確かにそれは私がもう一度それを試して十分なことを誓う。ありがとうございました。 – Eric