質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

2回答

5609閲覧

MySQLにおいて、更新日付が新しい行だけ取り出したい

hokuhoku8

総合スコア29

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

2クリップ

投稿2016/05/26 06:48

以下のようなデータがあるとします。

・データ

IDOPTION_1OPTION_2OPTION_3update_date
1YYY2016/5/15
2YYY2016/5/15
3YYY2016/5/15
4YYY2016/5/15
1NNN2016/5/25
2NNN2016/5/25
3NNN2016/5/25
4NNN2016/5/25

・欲しい出力値

IDOPTION_1OPTION_2OPTION_3update_date
1NNN2016/5/25
2NNN2016/5/25
3NNN2016/5/25
4NNN2016/5/25

欲しい出力値は、IDごとにupdate_dateカラムを比較して、更新日時が新しい行のデータを出力させたいと考えております。実際にはOPTION列が多く存在するため可能な限り短いSQL分で表現したいと思っております。

どのようなSQL分を書くべきか教示頂ければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

参考 : https://dev.mysql.com/doc/refman/5.6/ja/example-maximum-column-group-row.html

相関サブクエリバージョン

sql

1SELECT t1.* 2FROM [テーブル名] t1 3WHERE update_date = ( 4 SELECT MAX(update_date) 5 FROM [テーブル名] t2 6 WHERE t1.ID = t2.ID 7);
非相関サブクエリバージョン

sql

1SELECT t1.* 2FROM [テーブル名] t1 3JOIN ( 4 SELECT ID, MAX(update_date) AS update_date 5 FROM [テーブル名] 6 GROUP BY ID 7) AS t2 ON t1.ID = t2.ID AND t1.update_date = t2.update_date;
LEFT JOIN バージョン

sql

1SELECT t1.* 2FROM [テーブル名] t1 3LEFT JOIN [テーブル名] t2 ON t1.ID = t2.ID AND t1.update_date < t2.update_date 4WHERE t2.ID IS NULL;

実行結果は(たぶんw)一緒ですが、環境によって実行速度に違いが出る可能性があります。
ご自身の環境で、試してみてください。

投稿2016/05/26 07:03

編集2016/05/26 07:05
KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokuhoku8

2016/05/26 07:20

いろんなバージョン頂きましてありがとうございます。 実行負荷を考慮して選択させていただきます。たすかりました!
hokuhoku8

2016/07/08 01:41 編集

コメント削除
guest

0

SELECT
{省略}
FROM {テーブル名}
WHERE
update_date = (SELECT MAX(update_date) FROM {テーブル名})

投稿2016/05/26 06:53

koutan1976

総合スコア142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KiyoshiMotoki

2016/05/26 07:04

これだと全レコード中、update_dateが最新のものを抽出することになり、IDごとになりませんよ。
hokuhoku8

2016/05/26 07:05

IDでまとめたいです。
koutan1976

2016/05/26 07:13

すみません、質問文を見落としました。 Kiyoshiさんのを参考にしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問