MySQL只有8.0以上版本才有排名函数,rank()、row_number()、dense_rank()等,查看版本号的语句是select versino(),比如版本象我在用的一要是5.7的话,就得另外想办法。最近在比一堆集装箱的TEU按进门时间顺序进行排名,集装箱分大小柜,一个小柜即20尺算1个TEU,非20尺的是大柜,一个大柜2个TEU,就是说一个大柜排名的话,要占两个名额,如下:
select cont_no,
@rowrk := @rowrk + if(cont_size='20',1,2) rk
from (select @rowrk :=0) rn , cont_in i
order by in_date
其中 (select @rowrk :=0)相当于一个变量声明,赋初值,from后面还能这样写:from (selet @rowrk :=0, cont_no from cont_in order by in_date) i
然后用@rowrk := @rowrk + if(cont_size='20',1,2),每行计算,小柜加1,大柜加2,这样就完成了排名。
如果只是按箱数排名,一箱一个名额,就只用@rowrk := @rowrk +1了。排名当然还有更多方式,占位不占位的,无非多加几个变量进行判断比较,这里就不多说了
>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/2145.html