回答編集履歴
2
修正
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
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件表示されている
|