背景:表中的一个状态字段,有三种值:0、1、2;数据需要按照0、2、1的顺序并且按照创建时间降序排列。
想改底层数据库中的值是不对滴。这个时候就需要在内存中做些改变了,比如使用case when then "变一下"。
还需要实现分页,这里用的是oracle数据库,所以使用rownum表示数据的行数。
你能看到>= 20表示按照排序查询的结果显示到第20行,> 10表示第11行;
如果你使用的是current和pageSize,就需要计算一下,start = (current - 1) * pageSize; end = current * pageSize
这条语句用于springdata jpa 中,需要在@Query里加上nativeQuery = true
SELECT * FROM (SELECT ROW_.*, ROWNUM ROWNUM_ FROM (SELECT * FROM TABLE1 ORDER BY CASE TRANS_STATUS WHEN 2 THEN 1 WHEN 1 THEN 2 ELSE 0 END, create_time DESC) ROW_ WHERE ROWNUM <= 20) WHERE ROWNUM_ > 10;