
ちょっと躓いてしまったのでアドバイスが頂けたらと思います。
user_accountというテーブルと、logというテーブルがあります。
logというテーブルには各ユーザーの書き込み履歴が残されており、日付がtimestamp形式で格納されています。
ユーザー一覧に最終発言内容をくっ付けて表示したいのですがうまくいきません。
SELECT DISTINCT * FROM user_accounts LEFT JOIN (SELECT * FROM log ORDER BY update_date DESC ) aaa ON user_accounts.pkey = aaa.user_accounts_pkey;
などと記述してみましたが、思うような結果になりません。
自分の理想とする結果は以下のような出力結果です。
+----+----+----+--+-----------------+----------------+-----------+
| pkey| user| pass| comment| update_date|
+----+----+----+--+-----------------+----------------+-----------+
| 1 | test1| pass01|test03 written by test1| 40813|
| 2 | test2| pass02|testestest | 40690|
どうか、お知恵を貸してください。

No.1ベストアンサー
- 回答日時:
WINDOW関数が使えるなら
select pkey, user, pass, comment, update_date
from ( SELECT user_accounts.*, log.comment, log.update_date,
row_number() over(partition by user_account.pkey order by log.update_date ) rn
FROM user_accounts LEFT JOIN log
ON user_accounts.user = log.user_accounts_pkey) T
where rn = 1;
そうでなければ
SELECT user_accounts.*, log.comment, log.update_date
FROM user_accounts LEFT JOIN
( select * from log
where not exists
( select 1 from log l2
where log.user_accounts_pkey=l2.user_accounts_pkey
and log.update_date<l2.update_date ) ) l
ON user_accounts.pkey = l.user_accounts_pkey
いち早く反応してくださり、ありがとうございます。
not existsにこのような使い方があるとは。。。
もっと精進します。ありがとうございます。
No.3
- 回答日時:
訂正します。
まずは素直に最終発言を抽出します。
select user_account_pkey,max(update_data) from log group by user_account_pkey
これを使って log から必要なレコードをのみを抽出、user_account テーブルと結合して結果を得ます。
select ua.pkey,ua.user,ua.pass,l.comment,l.update_date
from log l,user_account ua
where l.user_account_pley = ua.pkey
and (l.user_account_pkey,update_data) in
(
select user_account_pkey,max(update_data) from log group by user_account_pkey
)
※SQLは机上で書きました動作確認はしていません。
ありがとうございます、group byの使い方が分からず、四苦八苦していた所にumekihajime様の書き込みがあり、大変参考になりました。
自分が求めていた書き方に一番近い書き方をされていたものの、動作確認をしていないとの事もあり、umekihajime様には大変恐縮ではありますが、最初に書き込みを下さった方をベストアンサーとさせていただきました。
ありがとうございました。
No.2
- 回答日時:
まずは素直に最優発言を抽出します。
select user_account_pkey,max(update_data) from log group by user_account_pkey
これを使って log から必要なレコードをのみを抽出、user_account テーブルと結合して結果を得ます。
select ua.pkey,ua.user,ua.pass,l.comment,l.update_date
from log l,user_account ua
where l.user_account_pley = ua.pkey
and (l.user_account_pkey,update_data) in
(
select user_account_pkey,max(update_data) from log group by user_account_pkey
)
※SQLは机上で書きました動作確認はしていません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
USB3.0R-P2-LPPCI ドライバー
-
postgresql についてです
-
Mac High Sierraでのubuntuのus...
-
postgresqlのtableのカラムの型...
-
php、postgresqlを使ってwebア...
-
三段論法を真理値表で証明する
-
sqlの中で、 例えば条件句で AN...
-
tesuto 01
-
python3.12のインストール方法
-
Pythonで2つのデータ(キー無し...
-
数値が定期的にあらわれる文字...
-
終端クォート ' が必要です と...
-
PostgressからMySQL(MariaDB)...
-
【PostgreSQL】行の値の並びを...
-
列が存在しないと言われる
-
PostgreSQL14.6のSSL対応について
-
ポストグレにあるExcelファイル...
-
PostgreSQL レコードからアイテ...
-
文字切り替えの時に 中央にでる A
-
postgreSQL カラムの全ての値を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PostgresSQLでの動的な計算
-
group byで指定したカラム以外...
-
検索条件の指定方法がわかりま...
-
SQLの条件抽出について
-
○日以内のレコード取得について
-
時間内かどうかの抽出
-
POSTGRESQLでt時間差が30分以上...
-
postgreSQLのselect文でデータ...
-
日時の期間での抽出
-
PostgresSQLで自動計算
-
ストアドプロシージャによる動...
-
複数の条件での絞り込み検索の仕方
-
PostgresのSQL文
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
truncate tableを使って複数の...
-
オラクルのUPDATEで複数テーブル
-
既存データをINSERT文にして出...
おすすめ情報