質問するログイン新規登録

質問編集履歴

3

2019/02/14 13:09

投稿

strawberry
strawberry

スコア14

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

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

2019/02/14 13:09

投稿

strawberry
strawberry

スコア14

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分を追記しました

2019/02/14 12:35

投稿

strawberry
strawberry

スコア14

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
  ```