大神的SQL语句

总结一下昨天的工作内容,需求是,从数据库获取图片的路径等信息,用轮播的形式展示在界面上,展示层已经做好了,要做的取出图片的路径等信息。 我困在了图片的获取上,因为数据库里面的图片信息非常多,要去过滤出最新的某个类型的图片,于是,岳总岳大神来了,他写了一个sql语句,惊呆了小伙伴,上代码:

 String sql=" with t1 as(select distinct(V.EK_TYPE),V.CREATED,VA.DESC_TEXT,V.EK_PAR_ID as pid,"
                +" decode(V.EK_URL_01,null,null,VA.DESC_TEXT || V.EK_URL_01) as link1,"
                +"decode(V.EK_URL_02,null,null,VA.DESC_TEXT || V.EK_URL_02) as link2,"
                +"decode(V.EK_URL_03,null,null,VA.DESC_TEXT || V.EK_URL_03) as link3,"
                +"decode(V.EK_URL_04,null,null,VA.DESC_TEXT || V.EK_URL_04) as link4,"
                +"decode(V.EK_URL_05,null,null,VA.DESC_TEXT || V.EK_URL_05) as link5 "
                +" from siebel.CX_ST_GENE_VIEW V LEFT JOIN siebel.S_LST_OF_VAL VA ON V.X_ATTRIB_01 = VA.VAL AND VA.type = 'EK_ATT_ROUTE' where V.EK_PAR_ID='"+parid+"' order by V.Created desc) ,"
                +" t2 as( select row_number() over (partition by eK_type order by created desc) r,t1.*  from t1)"
                +" select * from t2 where r=1 and t2.EK_TYPE is not null";

这种with 的用法我还是第一次见到,大神就是大神,下面来一一总结一下这几个关键的句子吧:
1.with t1 as(select 语句),t2 as(select 语句) select * from t2 where r=1 and t2.EK_TYPE is not null ,
解释: 这里with 就是连接两张表,最后一个select 语句就是从t1,和t2里面查询数据,相当于嵌套查询,只是写法更加灵活

2.
decode(V.EK_URL_01,null,null,VA.DESC_TEXT || V.EK_URL_01) as link1,decode 的用法,
解释:这里的意思是 如果
V.EK_URL_01的值为null ,则 link1这个字段的值就是 null ,否则值就是 VA.DESC_TEXT || V.EK_URL_01
这里面又涉及到 连接字段,“||” 这个符号就是连接符号,意思是,
VA.DESC_TEXT 加上 V.EK_URL_01 才是link1的值

3.
select row_number() over (partition by eK_type order by created desc) r,t1.*  from t1 
解释:  这句代码太神奇了, row_number() over
(partition by 字段1 order by 字段2 desc)通过字段1 分组,再通过字段2排序
这里的神奇之处在于,它是按分组后组内排序,也就是每一组里面, 都有排序,这样刚好满足我的需求,我只要通过选取每一组的第一条数据就可以拿到每个图片类型最新的那条数据,因为我是按照时间倒序排列的。代码如下:

select * from t2 where r=1 and t2.EK_TYPE is not null
r=1 就是每组的第一条数据啦,因为分组后,多了一个r 字段,就是行号,它是按照排序后的顺序排列的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值