SQL練習 ‐ 全員の最終ログイン日(一)order by、group by、集計関数max()

sql SQL練習

sql練習 

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');

SQL order by group by

コメント

タイトルとURLをコピーしました