回答編集履歴

3

fix

2015/08/14 05:27

投稿

ngyuki
ngyuki

スコア4514

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  ただし、この書き方は MySQL でしかできません。
40
40
 
41
- (ほか RDBMS だと select にアスタリスクは使えないし group by に test の列を羅列しないといけない)
41
+ (ほか RDBMS だと group by で select にアスタリスクは使えないし group by に test の列を羅列しないといけない)
42
42
 
43
43
 
44
44
 

2

追記

2015/08/14 05:27

投稿

ngyuki
ngyuki

スコア4514

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- ```
9
+ ```sql
10
10
 
11
11
  CREATE VIEW `view_test` AS
12
12
 
@@ -25,3 +25,35 @@
25
25
  )
26
26
 
27
27
  ```
28
+
29
+
30
+
31
+ ---
32
+
33
+
34
+
35
+ また、kokardy さんの回答と考え方はほとんど同じですが、
36
+
37
+ サブクエリを使わずに group by と having で済ませる方法もあります。
38
+
39
+ ただし、この書き方は MySQL でしかできません。
40
+
41
+ (ほか RDBMS だと select にアスタリスクは使えないし group by に test の列を羅列しないといけない)
42
+
43
+
44
+
45
+ ```sql
46
+
47
+ CREATE VIEW `view_test` AS
48
+
49
+ select t.* from test t
50
+
51
+ inner join test x on x.user_id = t.user_id
52
+
53
+ group by t.id
54
+
55
+ having t.input_date = max(x.input_date)
56
+
57
+ ```
58
+
59
+

1

fix

2015/08/11 23:12

投稿

ngyuki
ngyuki

スコア4514

test CHANGED
@@ -1,4 +1,8 @@
1
- 他にも定番の方法としては次のような相関サブクエリを使う方法があげられます。ただしたいていの場合、こっちのほうが遅いです。
1
+ 他にも定番の方法としては次のような相関サブクエリを使う方法があげられます。
2
+
3
+ この方法なら `user_id` と `input_date` で重複があっても `user_id` ごとに1行しか返りません。
4
+
5
+ ただしたいていの場合、こっちのほうが遅いです。
2
6
 
3
7
 
4
8