ランク処理をしてhaving rank<=10的なことをします
「購入時間の新しいもの」条件がいくつか必要で
buyHistoryにおけるregistTimeだと思うのですが
同じregistTimeがあった場合11件以上表示するのか
それとも二次処理としての古いidを優先するなどなんらかの処理が入るのかによって
表記が変わってきます
buyHistoryの具体的なサンプルデータと期待する結果を例示されると
それに合わせた回答が付きやすいでしょう
sample
一応サンプルだけ
SQL
1create table tbl(id int primary key auto_increment,uid int not null,pid int not null,regist datetime);
2insert into tbl(uid,pid,regist) values
3(1,101,'2018-01-01 00:10:00'),
4(1,102,'2018-01-01 00:20:00'),
5(2,101,'2018-01-01 00:10:00'),
6(1,103,'2018-01-01 00:40:00'),
7(1,101,'2018-01-01 00:50:00'),
8(1,104,'2018-01-01 00:30:00'),
9(2,102,'2018-01-01 00:20:00'),
10(3,101,'2018-01-01 00:10:00'),
11(3,103,'2018-01-01 00:20:00'),
12(3,105,'2018-01-01 00:20:00'),
13(3,107,'2018-01-01 00:30:00'),
14(3,109,'2018-01-01 00:40:00');
SQL
1select id,uid,pid,regist,
2(select count(*)+1 from tbl where uid=t1.uid and regist>t1.regist) rank
3from tbl as t1
4having rank<=3
5order by uid,rank
- uid=2は2件しかないので3件表示されない
- uid=3の3位が2件あるので4件表示されている
同順位を認めない
SQL
1select id,uid,pid,regist,
2(select count(*)+1 from tbl
3where uid=t1.uid and (regist>t1.regist or regist=t1.regist and id>t1.id )) rank
4from tbl as t1
5having rank<=3
6order by uid,rank
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/11 09:09
2019/01/11 09:28
2019/01/12 02:20