Topic:
今回のSQL練習テーマは、全員の最終ログイン日(一)、order by、group by、集計関数max()を使って問題を解きましょう。
登録テーブル login は以下のように:
+----+---------+-----------+------------+
| id | user_id | client_id | date |
+----+---------+-----------+------------+
| 1 | 2 | 1 | 2020-10-12 |
| 2 | 3 | 2 | 2020-10-12 |
| 3 | 2 | 2 | 2020-10-13 |
| 4 | 3 | 2 | 2020-10-13 |
+----+---------+-----------+------------+
意味を説明する:
1行目は、user_id 2 のユーザーが 2020 年 10 月 12 日にクライアント ID 1 のデバイスを使用して、 Aサイド にログインした。
4行目は、user_id 3 のユーザーが 2020 年 10 月 13 日にクライアント ID 2 のデバイスを使用して、 Aサイド にログインした。
問題:
各ユーザーが最終ログイン日をクエリする 、user_id の昇順で並べ替えてください。
上記の例の出力は次のようになります。
+---------+------------+
| user_id | max(date) |
+---------+------------+
| 2 | 2020-10-13 |
| 3 | 2020-10-13 |
+---------+------------+
解答:
select user_id, max(date)
from login
group by user_id
order by user_id;
DDLとDMLは以下に添付するので、好きな方はご利用ください。
drop table if exists login;
drop table if exists user;
drop table if exists client;
CREATE TABLE login (
id int(4) NOT NULL,
user_id int(4) NOT NULL,
client_id int(4) NOT NULL,
date date NOT NULL,
PRIMARY KEY (id));
CREATE TABLE user (
id int(4) NOT NULL,
name varchar(32) NOT NULL,
PRIMARY KEY (id));
CREATE TABLE client (
id int(4) NOT NULL,
name varchar(32) NOT NULL,
PRIMARY KEY (id));
INSERT INTO login VALUES
(1,2,1,'2020-10-12'),
(2,3,2,'2020-10-12'),
(3,2,2,'2020-10-13'),
(4,3,2,'2020-10-13');
INSERT INTO user VALUES
(1,'tm'),
(2,'fh'),
(3,'wangchao');
INSERT INTO client VALUES
(1,'pc'),
(2,'ios'),
(3,'anroid'),
(4,'h5');
コメント