2017-12-12 23 views
0

私は、ユーザがデータベースに保存されている連絡先にメッセージを送信できるWebアプリケーションを持っています。メッセージが正常に転記されると、受信者の連絡先の詳細が別のテーブルに入力されます。私は、そのメッセージの受信者を返すクエリを作成したいと思います。複数のレコードのPostgreSQLの最新のエントリを返す

communication_idは外部キーであり、個人ごとではなく異なる通信ごとに区別されます。例えば、ユーザーがメッセージを送信し、20人の受信者がある場合、私はのみ20全20は同じcommunication_idを持って

を取得したいのですが、私が持っているクエリは、これまで

SELECT communication_id, first_name ||' ' || last_name AS recipient_name, telephone 
FROM communications_sent 
ORDER BY communication_id DESC 

ですが皆が知っているとおり、すべてを返すでしょう。また、いくつかのエントリが除外されるので、私はLIMITできません。 COUNT(*)>1を使用することはできません。古い通信でも1より大きいカウントがあるためです。最新のエントリだけを取得するにはどうすればよいですか? 、一つのエントリだろ100

上記の私のクエリの出力例は次のようになります。

|communication_id|recipient_name|telephone| 
|  263  | John Doe |712100100| 
|  263  | Willy Bill |721001001| 
|  262  | Mary May |700101010| 
|  262  | Joe Jimmy |722111000| 

答えて

0

私が正しく理解していれば、あなたは一つの通信IDが、すべての受信者だけが欲しいです。ある場合:

SELECT cs.communication_id, cs.first_name ||' ' || cs.last_name AS recipient_name, cs.telephone 
FROM communications_sent cs 
WHERE cs.communication_id = (SELECT MAX(cs2.communication_id) 
          FROM communications_sent cs2 
          ) 
ORDER BY cs.communication_id DESC 
+0

ありがとうございます。出来た。私は質問がある、なぜそれは入れ子にする必要がありますか?最初の引数として 'SELECT MAX(cs.communication_id)、...'として使用されている場合は、エラー –

+0

@Clint_Aを出力します。 。 。 WHERE句では集計関数を使用できないためです。 –

関連する問題