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

回答編集履歴

3

fix

2015/08/14 05:27

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  また、kokardy さんの回答と考え方はほとんど同じですが、
19
19
  サブクエリを使わずに group by と having で済ませる方法もあります。
20
20
  ただし、この書き方は MySQL でしかできません。
21
- (ほか RDBMS だと select にアスタリスクは使えないし group by に test の列を羅列しないといけない)
21
+ (ほか RDBMS だと group by で select にアスタリスクは使えないし group by に test の列を羅列しないといけない)
22
22
 
23
23
  ```sql
24
24
  CREATE VIEW `view_test` AS

2

追記

2015/08/14 05:27

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -2,7 +2,7 @@
2
2
  この方法なら `user_id` と `input_date` で重複があっても `user_id` ごとに1行しか返りません。
3
3
  ただしたいていの場合、こっちのほうが遅いです。
4
4
 
5
- ```
5
+ ```sql
6
6
  CREATE VIEW `view_test` AS
7
7
  select * from test t
8
8
  where t.id = (
@@ -11,4 +11,19 @@
11
11
  order by x.input_date desc, x.id desc
12
12
  limit 1
13
13
  )
14
- ```
14
+ ```
15
+
16
+ ---
17
+
18
+ また、kokardy さんの回答と考え方はほとんど同じですが、
19
+ サブクエリを使わずに group by と having で済ませる方法もあります。
20
+ ただし、この書き方は MySQL でしかできません。
21
+ (ほか RDBMS だと select にアスタリスクは使えないし group by に test の列を羅列しないといけない)
22
+
23
+ ```sql
24
+ CREATE VIEW `view_test` AS
25
+ select t.* from test t
26
+ inner join test x on x.user_id = t.user_id
27
+ group by t.id
28
+ having t.input_date = max(x.input_date)
29
+ ```

1

fix

2015/08/11 23:12

投稿

ngyuki
ngyuki

スコア4516

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