create table tbl (id VARCHAR(32),
col int);
DROP TABLE tb1;
insert into tbl values
('a',56),
('a',46),
('a',35),
('b',68),
('b',33),
('b',92);
SELECT * FROM tbl;
SELECT
t.*,
t1.last_num,
t2.last_forword_num
FROM
(select a.id,a.col,count(*) as rank_ from tbl a,tbl b where a.col>=b.col group by a.id,a.col) t
LEFT JOIN
(SELECT
w.id,MAX(w.rownum) last_num
FROM
(select a.id,a.col,count(*) as rownum from tbl a,tbl b where a.col>=b.col group by a.id,a.col) w
GROUP BY id) t1 ON t.id = t1.id AND t.rank_ = t1.last_num
LEFT JOIN
(SELECT
w.id,MAX(w.rownum)-1 last_forword_num
FROM
(select a.id,a.col,count(*) as rownum from tbl a,tbl b where a.col>=b.col group by a.id,a.col) w
GROUP BY id) t2 ON t.id = t2.id AND t.rank_ = t2.last_forword_num;
WHERE t1.last_num is not null and t2.last_forword_num is not null
mysql笛卡尔积排序
最新推荐文章于 2024-08-24 21:47:54 发布