求大佬帮忙处理一下,谢谢了:
SELECT *
from (select row_number() over(PARTITION BY pig_id order by arr_date desc) rn,
pig_id,
farm_id
from T_BOAR_PIGINFO_MOVED
where (BOR_DATE >= to_date('2010-7-19','YYYY-MM-DD')
and BOR_DATE <= to_date('2019-7-19','YYYY-MM-DD') )
and BREED_CODE ='BB'
and FARM_ID in ('530001', '100301')
and length(Dadid) > 0
and length(MaId) > 0
and sex in (0, 1)
and exists (select * from T_BREED_GROWTH a
where a.pig_id = T_BOAR_PIGINFO_MOVED.pig_id
and a.TEST_WT_END >= 85
and a.TEST_WT_END <= 130
and a.AVERAGE_BFT >= 4
and a.AVERAGE_BFT <= 30
and a.test_days_end >= 100
and a.test_days_end <= 300)
and not exists
(select 1 from TEMP_BD_DAT_HMMY x
where x.R_ANIMAL = T_BOAR_PIGINFO_MOVED.pig_id )) a where a.rn = 1
MySQL 中的分页跟 Oracle 不一样,MySQL 是没有 row_number 函数的,它是通过 limit startIndex,length 来进行分页的。
在mysql中没有分组排序的函数得自己写类似的功能,思路大概是先设定两个变量一个存排序的序号,一个存分组的字符串,再按你要进行分组的各列以及需要进行排序的列排序,分组的排序规则随意,
进行排序的列要与over里的排序规则一样,排完序后再将分组的各列进行连接后与第二个变量比较,再根据比较结果给出排序序号
示例:SET @rb=1;
SET @egn='';
SELECT @rb:= CASE when @egn=c1 THEN @rb+1 ELSE 1 END AS rank,@egn:=c1 AS c1,num
FROM
(SELECT c1,num FROM column
ORDER BY 1,2) t1
mybatis里面有其管理分页的类 RowBounds