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

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

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

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

Q&A

解決済

2回答

1842閲覧

MYSQLでのSQL文を教えてください

starslip0120

総合スコア28

MySQL

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

0グッド

0クリップ

投稿2017/04/21 00:51

ユーザ更新時刻
Aさん2017-04-21 09:30:001
Aさん2017-04-21 09:35:002
Bさん2017-04-21 09:31:006
Bさん2017-04-21 09:40:003
Cさん2017-04-21 09:32:008
Cさん2017-04-21 09:42:004

MYSQLで上のテーブルから各ユーザの最新の更新時刻の値を取るにはどのようなSQL文を書けばいいですか
この場合ですと以下の結果を出すSQL文を教えてください。

ユーザ更新時刻
Aさん2017-04-21 09:35:002
Bさん2017-04-21 09:40:003
Cさん2017-04-21 09:42:004

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

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

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

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

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

guest

回答2

0

ベストアンサー

ユーザ単位の最大の更新時刻を求めるクエリ

SQL

1SELECT 2 ユーザ, 3 MAX(更新時刻) 4FROM 5 テーブル 6GROUP BY 7 ユーザ;

最新(つまり最大)を求めるにはMAXという集合関数を使います。そして、それはユーザ単位での最大値なのでGROUP BYでユーザを指定します。これで各ユーザごとの最新の更新時刻の組み合わせが得られます。

この結果を使って、ユーザと最大の更新時刻を持つ組み合わせのレコードを探します。

SQL

1SELECT 2 * 3FROM 4 テーブル 5WHERE 6 (ユーザ, 更新時刻) IN ( 7 SELECT 8 ユーザ, 9 MAX(更新時刻) 10 FROM 11 テーブル 12 GROUP BY 13 ユーザ 14 );

投稿2017/04/21 01:12

masaya_ohashi

総合スコア9206

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

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

masaya_ohashi

2017/04/21 01:32

補足ですが、もし「同一ユーザに同じ更新時刻を持つデータが2以上ある」場合、これだと一件に絞り込まれないので注意してください。
starslip0120

2017/04/21 02:35

了解しました。どうもありがとうございました。
guest

0

こんな感じです

  • 元データ

SQL

1create table tbl (user varchar(20),modified datetime, val int); 2insert into tbl values 3('Aさん','2017-04-21 09:30:00',1), 4('Aさん','2017-04-21 09:35:00',2), 5('Bさん','2017-04-21 09:31:00',6), 6('Bさん','2017-04-21 09:40:00',3), 7('Cさん','2017-04-21 09:32:00',8), 8('Cさん','2017-04-21 09:42:00',4);
  • 検索

SQL

1select * from tbl as t0 2inner join (select user,max(modified) as modified from tbl group by user) as t1 3using(user,modified);

投稿2017/04/21 01:17

yambejp

総合スコア114773

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問