十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
首先,建立测试表,插入测试数据:
广汉网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联从2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
create table test_a (aa varchar2(6),bb varchar2(6));
当我们想要取每条记录中字段AA和BB的最大值(OR最小值)时,通常想到的逻辑是if-then-else;又或者是case- when-else-end?
emmm,其实一个关键词就可以搞定啦。取最大:greatest(字段1,字段2)取最小:least(字段1,字段2)。
select a.aa,a.bb,greatest(a.aa,a.bb) from test_a a ; --取字段aa和字段bb中的最大值
select a.aa,a.bb,least(a.aa,a.bb) from test_a a ; --取字段aa和字段bb中的最小值
END;
1、创建测试表,
create table test_max(id number, value number);
2、插入测试数据
insert into test_max values(1,12);
insert into test_max values(2,100);
insert into test_max values(3,55);
insert into test_max values(4,100);
insert into test_max values(5,50);
commit;
3、查询表中全量数据,select t.*, rowid from test_max t;
4、编写sql,使用rank分析函数,取value值为最大的记录; select t.* from (select t.*, rank() over(order by value desc) rk from test_max t) t where rk = 1;
可以写一个function,把字母都过滤掉,只剩下数字,然后就可以根据数字排序了
CREATE OR REPLACE FUNCTION GETNUMBER(STR IN VARCHAR2) RETURN VARCHAR2 IS
V_TEMP VARCHAR2(200);
V_RETURN VARCHAR2(200);
IDX NUMBER := 1;
BEGIN
WHILE (IDX = LENGTH(STR)) LOOP
V_TEMP := SUBSTR(STR, IDX, 1);
IF (ASCII(UPPER(V_TEMP)) = 48 AND ASCII(UPPER(V_TEMP)) = 57) THEN
V_RETURN := V_RETURN || V_TEMP;
END IF;
IDX := IDX + 1;
END LOOP;
RETURN V_RETURN;
END GETNUMBER;
select * from (select row_number() over(partition by id order by create_tiem desc) rn, id, create_time, ... , ... from table )t1 where rn = 1;
在这里...代表的是字段名称,将需要的字段名称放在这里,需要哪些放那些。
SELECT t.*FROM (select * from `table` order by `create_time` desc limit 10000000000) t GROUP BY t.id;
在这里就是先将数据进行排序然后再分组,然后取出的是最大的一个值,这里有点要注意,limit 10000000000这个根据不同的版本看是否要加这个,5.5之前的不用加,之后的要加,反正加上肯定没有错。
group by后取的一条数据默认是按主键id排序后的第一条