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

回答編集履歴

2

修正

2019/01/11 09:27

投稿

yambejp
yambejp

スコア117896

answer CHANGED
@@ -39,4 +39,16 @@
39
39
  order by uid,rank
40
40
  ```
41
41
  - uid=2は2件しかないので3件表示されない
42
- - uid=3の3位が2件あるので4件表示されている
42
+ - uid=3の3位が2件あるので4件表示されている
43
+
44
+
45
+ # 同順位を認めない
46
+ - 2次ソートにidを指定
47
+ ```SQL
48
+ select id,uid,pid,regist,
49
+ (select count(*)+1 from tbl
50
+ where uid=t1.uid and (regist>t1.regist or regist=t1.regist and id>t1.id )) rank
51
+ from tbl as t1
52
+ having rank<=3
53
+ order by uid,rank
54
+ ```

1

sample

2019/01/11 09:27

投稿

yambejp
yambejp

スコア117896

answer CHANGED
@@ -8,4 +8,35 @@
8
8
 
9
9
 
10
10
  buyHistoryの具体的なサンプルデータと期待する結果を例示されると
11
- それに合わせた回答が付きやすいでしょう
11
+ それに合わせた回答が付きやすいでしょう
12
+
13
+ # sample
14
+
15
+ 一応サンプルだけ
16
+ ```SQL
17
+ create table tbl(id int primary key auto_increment,uid int not null,pid int not null,regist datetime);
18
+ insert into tbl(uid,pid,regist) values
19
+ (1,101,'2018-01-01 00:10:00'),
20
+ (1,102,'2018-01-01 00:20:00'),
21
+ (2,101,'2018-01-01 00:10:00'),
22
+ (1,103,'2018-01-01 00:40:00'),
23
+ (1,101,'2018-01-01 00:50:00'),
24
+ (1,104,'2018-01-01 00:30:00'),
25
+ (2,102,'2018-01-01 00:20:00'),
26
+ (3,101,'2018-01-01 00:10:00'),
27
+ (3,103,'2018-01-01 00:20:00'),
28
+ (3,105,'2018-01-01 00:20:00'),
29
+ (3,107,'2018-01-01 00:30:00'),
30
+ (3,109,'2018-01-01 00:40:00');
31
+ ```
32
+
33
+ - ユーザーごと最新3件を表示
34
+ ```SQL
35
+ select id,uid,pid,regist,
36
+ (select count(*)+1 from tbl where uid=t1.uid and regist>t1.regist) rank
37
+ from tbl as t1
38
+ having rank<=3
39
+ order by uid,rank
40
+ ```
41
+ - uid=2は2件しかないので3件表示されない
42
+ - uid=3の3位が2件あるので4件表示されている