質問編集履歴
3
title
CHANGED
File without changes
|
body
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
サンプルデータ(actionテーブルのレコードが1-3まで) の場合、理想としている結果は、下記のとおりです。
|
10
10
|
|
11
11
|
###質問1
|
12
|
+
user_idをキーとしてactionテーブルとuserテーブルを結合し、userに対してactionテーブルのレコードが複数ある場合には、action.dateが最も最新のデータのみを取得したいです。
|
13
|
+
また、合わせて、actionにレコードが存在しないuserは、actionのカラムをNULLにした形で取得したいです。
|
12
14
|
下記のような結果を取得するには、どのようなSQLが適当でしょうか?
|
13
15
|
|
14
16
|
```
|
2
サンプルデータをフォーマットしました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -29,29 +29,38 @@
|
|
29
29
|
|
30
30
|
|
31
31
|
##### ★サンプルデータ★
|
32
|
+
※userテーブルのuser_idが、actionテーブルのuser_idとマッピングされます。
|
32
33
|
|
33
|
-
######【userテーブル】
|
34
|
+
######【userテーブル】
|
35
|
+
- テーブル作成
|
36
|
+
```SQL
|
34
37
|
CREATE TABLE `user` (
|
35
38
|
`user_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
36
39
|
`name` text,
|
37
40
|
PRIMARY KEY (`user_id`)
|
38
41
|
);
|
42
|
+
```
|
39
43
|
|
40
|
-
|
44
|
+
- データ投入
|
45
|
+
```SQL
|
41
46
|
INSERT INTO user VALUES(NULL,"yamada");
|
42
47
|
INSERT INTO user VALUES(NULL,"suzuki");
|
43
48
|
INSERT INTO user VALUES(NULL,"sato");
|
44
|
-
|
45
49
|
```
|
46
|
-
user_id,name
|
47
|
-
==========
|
48
|
-
1,yamada
|
49
|
-
2,suzuki
|
50
|
-
3,sato
|
51
|
-
```
|
52
50
|
|
51
|
+
- テーブル内のデータ
|
53
52
|
|
53
|
+
|user_id|name|
|
54
|
+
|:--|:--|
|
55
|
+
|1|yamada|
|
56
|
+
|2|suzuki|
|
57
|
+
|3|sato|
|
58
|
+
|
59
|
+
|
54
60
|
######【actionテーブル】
|
61
|
+
- テーブル作成
|
62
|
+
|
63
|
+
```SQL
|
55
64
|
CREATE TABLE `action` (
|
56
65
|
`action_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
57
66
|
`user_id` bigint(20) NOT NULL,
|
@@ -59,18 +68,21 @@
|
|
59
68
|
`action` text NOT NULL,
|
60
69
|
PRIMARY KEY (`action_id`)
|
61
70
|
);
|
71
|
+
```
|
62
72
|
|
73
|
+
- データ投入
|
74
|
+
```SQL
|
63
75
|
INSERT INTO action VALUES(NULL,1,"2019-01-01","work");
|
64
76
|
INSERT INTO action VALUES(NULL,1,"2019-01-02","rest");
|
65
77
|
INSERT INTO action VALUES(NULL,3,"2019-01-02","shopping");
|
66
78
|
INSERT INTO action VALUES(NULL,1,"2019-01-01","shopping");
|
67
|
-
|
68
79
|
```
|
69
|
-
action_id,user_id,date,action
|
70
|
-
==========
|
71
|
-
1,1,2019-01-01,work
|
72
|
-
2,1,2019-01-02,rest
|
73
|
-
3,3,2019-01-02,shopping
|
74
|
-
(4,1,2019-01-01,shopping)
|
75
80
|
|
76
|
-
|
81
|
+
- テーブル内のデータ
|
82
|
+
|
83
|
+
|action_id|user_id|date|action|
|
84
|
+
|:--|:--|:--|:--|
|
85
|
+
|1|1|2019-01-01|work|
|
86
|
+
|2|1|2019-01-02|rest|
|
87
|
+
|3|3|2019-01-02|shopping|
|
88
|
+
|4|1|2019-01-01|shopping|
|
1
サンプルテーブル作成のためのCREATE文とINSERT分を追記しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
表題の件に関して、ご教示いただけますと幸いです。
|
2
|
+
実際のテーブルの簡略版のため、テーブル構造に関するご指摘は御容赦いただけますと幸いです。
|
2
3
|
|
3
4
|
userテーブルのデータ1に対して、actionテーブルのデータは多数あります。
|
4
5
|
userテーブル:actionテーブルが1:0になることもありえます。
|
@@ -30,6 +31,17 @@
|
|
30
31
|
##### ★サンプルデータ★
|
31
32
|
|
32
33
|
######【userテーブル】
|
34
|
+
CREATE TABLE `user` (
|
35
|
+
`user_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
36
|
+
`name` text,
|
37
|
+
PRIMARY KEY (`user_id`)
|
38
|
+
);
|
39
|
+
|
40
|
+
|
41
|
+
INSERT INTO user VALUES(NULL,"yamada");
|
42
|
+
INSERT INTO user VALUES(NULL,"suzuki");
|
43
|
+
INSERT INTO user VALUES(NULL,"sato");
|
44
|
+
|
33
45
|
```
|
34
46
|
user_id,name
|
35
47
|
==========
|
@@ -38,13 +50,27 @@
|
|
38
50
|
3,sato
|
39
51
|
```
|
40
52
|
|
53
|
+
|
41
54
|
######【actionテーブル】
|
55
|
+
CREATE TABLE `action` (
|
56
|
+
`action_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
57
|
+
`user_id` bigint(20) NOT NULL,
|
58
|
+
`date` date NOT NULL,
|
59
|
+
`action` text NOT NULL,
|
60
|
+
PRIMARY KEY (`action_id`)
|
61
|
+
);
|
62
|
+
|
63
|
+
INSERT INTO action VALUES(NULL,1,"2019-01-01","work");
|
64
|
+
INSERT INTO action VALUES(NULL,1,"2019-01-02","rest");
|
65
|
+
INSERT INTO action VALUES(NULL,3,"2019-01-02","shopping");
|
66
|
+
INSERT INTO action VALUES(NULL,1,"2019-01-01","shopping");
|
67
|
+
|
42
68
|
```
|
43
69
|
action_id,user_id,date,action
|
44
70
|
==========
|
45
71
|
1,1,2019-01-01,work
|
46
72
|
2,1,2019-01-02,rest
|
47
73
|
3,3,2019-01-02,shopping
|
48
|
-
(4,2019-01-01,shopping)
|
74
|
+
(4,1,2019-01-01,shopping)
|
49
75
|
|
50
76
|
```
|