質問編集履歴

3

2019/02/14 13:09

投稿

strawberry
strawberry

スコア14

test CHANGED
File without changes
test CHANGED
@@ -19,6 +19,10 @@
19
19
 
20
20
 
21
21
  ###質問1
22
+
23
+ user_idをキーとしてactionテーブルとuserテーブルを結合し、userに対してactionテーブルのレコードが複数ある場合には、action.dateが最も最新のデータのみを取得したいです。
24
+
25
+ また、合わせて、actionにレコードが存在しないuserは、actionのカラムをNULLにした形で取得したいです。
22
26
 
23
27
  下記のような結果を取得するには、どのようなSQLが適当でしょうか?
24
28
 

2

サンプルデータをフォーマットしました。

2019/02/14 13:09

投稿

strawberry
strawberry

スコア14

test CHANGED
File without changes
test CHANGED
@@ -60,9 +60,15 @@
60
60
 
61
61
  ##### ★サンプルデータ★
62
62
 
63
+ ※userテーブルのuser_idが、actionテーブルのuser_idとマッピングされます。
63
64
 
64
65
 
66
+
65
- ######【userテーブル】
67
+ ######【userテーブル】
68
+
69
+ - テーブル作成
70
+
71
+ ```SQL
66
72
 
67
73
  CREATE TABLE `user` (
68
74
 
@@ -74,9 +80,13 @@
74
80
 
75
81
  );
76
82
 
83
+ ```
77
84
 
78
85
 
79
86
 
87
+ - データ投入
88
+
89
+ ```SQL
80
90
 
81
91
  INSERT INTO user VALUES(NULL,"yamada");
82
92
 
@@ -84,27 +94,35 @@
84
94
 
85
95
  INSERT INTO user VALUES(NULL,"sato");
86
96
 
97
+ ```
87
98
 
88
99
 
89
- ```
90
100
 
91
- user_id,name
101
+ - テーブル内のデータ
92
102
 
93
- ==========
94
103
 
95
- 1,yamada
96
104
 
97
- 2,suzuki
105
+ |user_id|name|
98
106
 
99
- 3,sato
107
+ |:--|:--|
100
108
 
109
+ |1|yamada|
110
+
111
+ |2|suzuki|
112
+
101
- ```
113
+ |3|sato|
102
114
 
103
115
 
104
116
 
105
117
 
106
118
 
107
119
  ######【actionテーブル】
120
+
121
+ - テーブル作成
122
+
123
+
124
+
125
+ ```SQL
108
126
 
109
127
  CREATE TABLE `action` (
110
128
 
@@ -120,7 +138,13 @@
120
138
 
121
139
  );
122
140
 
141
+ ```
123
142
 
143
+
144
+
145
+ - データ投入
146
+
147
+ ```SQL
124
148
 
125
149
  INSERT INTO action VALUES(NULL,1,"2019-01-01","work");
126
150
 
@@ -130,22 +154,22 @@
130
154
 
131
155
  INSERT INTO action VALUES(NULL,1,"2019-01-01","shopping");
132
156
 
133
-
134
-
135
157
  ```
136
-
137
- action_id,user_id,date,action
138
-
139
- ==========
140
-
141
- 1,1,2019-01-01,work
142
-
143
- 2,1,2019-01-02,rest
144
-
145
- 3,3,2019-01-02,shopping
146
-
147
- (4,1,2019-01-01,shopping)
148
158
 
149
159
 
150
160
 
151
- ```
161
+ - テーブル内のデータ
162
+
163
+
164
+
165
+ |action_id|user_id|date|action|
166
+
167
+ |:--|:--|:--|:--|
168
+
169
+ |1|1|2019-01-01|work|
170
+
171
+ |2|1|2019-01-02|rest|
172
+
173
+ |3|3|2019-01-02|shopping|
174
+
175
+ |4|1|2019-01-01|shopping|

1

サンプルテーブル作成のためのCREATE文とINSERT分を追記しました

2019/02/14 12:35

投稿

strawberry
strawberry

スコア14

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,6 @@
1
1
  表題の件に関して、ご教示いただけますと幸いです。
2
+
3
+ 実際のテーブルの簡略版のため、テーブル構造に関するご指摘は御容赦いただけますと幸いです。
2
4
 
3
5
 
4
6
 
@@ -62,6 +64,28 @@
62
64
 
63
65
  ######【userテーブル】
64
66
 
67
+ CREATE TABLE `user` (
68
+
69
+ `user_id` bigint(20) NOT NULL AUTO_INCREMENT,
70
+
71
+ `name` text,
72
+
73
+ PRIMARY KEY (`user_id`)
74
+
75
+ );
76
+
77
+
78
+
79
+
80
+
81
+ INSERT INTO user VALUES(NULL,"yamada");
82
+
83
+ INSERT INTO user VALUES(NULL,"suzuki");
84
+
85
+ INSERT INTO user VALUES(NULL,"sato");
86
+
87
+
88
+
65
89
  ```
66
90
 
67
91
  user_id,name
@@ -78,7 +102,35 @@
78
102
 
79
103
 
80
104
 
105
+
106
+
81
107
  ######【actionテーブル】
108
+
109
+ CREATE TABLE `action` (
110
+
111
+ `action_id` bigint(20) NOT NULL AUTO_INCREMENT,
112
+
113
+ `user_id` bigint(20) NOT NULL,
114
+
115
+ `date` date NOT NULL,
116
+
117
+ `action` text NOT NULL,
118
+
119
+ PRIMARY KEY (`action_id`)
120
+
121
+ );
122
+
123
+
124
+
125
+ INSERT INTO action VALUES(NULL,1,"2019-01-01","work");
126
+
127
+ INSERT INTO action VALUES(NULL,1,"2019-01-02","rest");
128
+
129
+ INSERT INTO action VALUES(NULL,3,"2019-01-02","shopping");
130
+
131
+ INSERT INTO action VALUES(NULL,1,"2019-01-01","shopping");
132
+
133
+
82
134
 
83
135
  ```
84
136
 
@@ -92,7 +144,7 @@
92
144
 
93
145
  3,3,2019-01-02,shopping
94
146
 
95
- (4,2019-01-01,shopping)
147
+ (4,1,2019-01-01,shopping)
96
148
 
97
149
 
98
150