查看: 4443|回复: 22

【讨论】求思路 求sql

[复制链接]
论坛徽章:
0
发表于 2014-11-6 10:04 | 显示全部楼层 |阅读模式
数据如下

2014 06 0.6
2013 06 0.64
2014 07 0.8
2013 07 0.57
2014 08 0.83
2013 08 0.58


要求sql查询结果
2014 06 0.04
2014 07 0.23
2014 08 0.25

求大神给思路  谢谢

论坛徽章:
142
秀才
日期:2016-01-06 14:01:09秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:08:02秀才
日期:2016-02-18 10:08:14秀才
日期:2016-03-01 09:57:08天蝎座
日期:2016-03-18 14:23:56秀才
日期:2016-03-24 09:10:24秀才
日期:2016-03-24 09:20:52秀才
日期:2016-04-21 14:08:53秀才
日期:2016-04-21 14:11:59
发表于 2014-11-6 10:16 | 显示全部楼层
with temp as
(select 2014 year, '06' month, 0.6 amt
    from dual
  union all
  select 2013 year, '06' month, 0.64 amt
    from dual
  union all
  select 2014 year, '07' month, 0.8 amt
    from dual
  union all
  select 2013 year, '07' month, 0.57 amt
    from dual
  union all
  select 2014 year, '08' month, 0.83 amt
    from dual
  union all
  select 2013 year, '08' month, 0.58 amt from dual)
select year, month, abs(amt - prior_amt) amt
  from (select year,
               month,
               amt,
               lag(amt) over(partition by month order by year) prior_amt
          from temp)
where year = 2014

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2014-11-6 10:20 | 显示全部楼层
谢谢 大牛! 感谢

使用道具 举报

回复
认证徽章
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
发表于 2014-11-6 10:24 | 显示全部楼层
另一种思路和方法:

with temp as
(select 2014 year, '06' month, 0.6 amt
    from dual
  union all
  select 2013 year, '06' month, 0.64 amt
    from dual
  union all
  select 2014 year, '07' month, 0.8 amt
    from dual
  union all
  select 2013 year, '07' month, 0.57 amt
    from dual
  union all
  select 2014 year, '08' month, 0.83 amt
    from dual
  union all
  select 2013 year, '08' month, 0.58 amt from dual)
SELECT a.year,a.month,abs(a.amt-b.amt) amt FROM
(SELECT * FROM temp WHERE YEAR='2014') a,
(SELECT * FROM temp WHERE YEAR='2013') b
WHERE a.month=b.month(+);

使用道具 举报

回复
认证徽章
论坛徽章:
32
懒羊羊
日期:2015-03-25 16:16:10ITPUB14周年纪念章
日期:2015-10-26 17:24:11射手座
日期:2015-09-23 08:53:55喜羊羊
日期:2015-06-15 13:04:17暖羊羊
日期:2015-05-21 16:12:35沸羊羊
日期:2015-05-07 17:25:26暖羊羊
日期:2015-05-21 16:12:35暖羊羊
日期:2015-05-21 16:12:35慢羊羊
日期:2015-04-21 17:07:36慢羊羊
日期:2015-03-25 09:38:59
发表于 2014-11-6 10:26 | 显示全部楼层
with t as(
     select '2014' t1,'06' t2,'0.6't3 from dual union all
      select '2013' t1,'06' t2,'0.64't3 from dual union all
       select '2014' t1,'07' t2,'0.8't3 from dual union all
        select '2013' t1,'07' t2,'0.57't3 from dual union all
         select '2014' t1,'08' t2,'0.83't3 from dual union all
          select '2013' t1,'08' t2,'0.58't3 from  dual)
      select a.t1,a.t2, abs(a.t3-a.t4) from(
          select t1,t2,t3,lead(t3,1,0) over(order by t2) t4 from t ) a where a.t1='2014';

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2014-11-6 10:42 | 显示全部楼层
iyee_tu 发表于 2014-11-6 10:26
with t as(
     select '2014' t1,'06' t2,'0.6't3 from dual union all
      select '2013' t1,'06' t ...

还有个问题就是  上面6条数据是用sql查询出来的  但是我最终的结果是要显示3条  是不是sql要放在一起?还是

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2014-11-6 10:58 | 显示全部楼层
bfc99 发表于 2014-11-6 10:24
另一种思路和方法:

with temp as

还有个问题就是  上面6条数据是用sql查询出来的  但是我最终的结果是要显示3条  是不是sql要放在一起?并且数据是动态的,怎么解决

使用道具 举报

回复
认证徽章
论坛徽章:
32
懒羊羊
日期:2015-03-25 16:16:10ITPUB14周年纪念章
日期:2015-10-26 17:24:11射手座
日期:2015-09-23 08:53:55喜羊羊
日期:2015-06-15 13:04:17暖羊羊
日期:2015-05-21 16:12:35沸羊羊
日期:2015-05-07 17:25:26暖羊羊
日期:2015-05-21 16:12:35暖羊羊
日期:2015-05-21 16:12:35慢羊羊
日期:2015-04-21 17:07:36慢羊羊
日期:2015-03-25 09:38:59
发表于 2014-11-6 10:59 | 显示全部楼层
u012727351 发表于 2014-11-6 10:42
还有个问题就是  上面6条数据是用sql查询出来的  但是我最终的结果是要显示3条  是不是sql要放在一起?还 ...

就把你查出来的 6条数据的sql当一个临时表.....

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2014-11-6 11:05 | 显示全部楼层
iyee_tu 发表于 2014-11-6 10:59
就把你查出来的 6条数据的sql当一个临时表.....

但是我要在程序里面调用方法的sql  我自己写的sql查询的是6条数据 你给的解决方法是查询3条,我的意思是只有一个sql调用查出结果,这个怎么弄

使用道具 举报

回复
认证徽章
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
发表于 2014-11-6 11:30 | 显示全部楼层
u012727351 发表于 2014-11-6 10:58
还有个问题就是  上面6条数据是用sql查询出来的  但是我最终的结果是要显示3条  是不是sql要放在一起?并 ...

把2014和2013的条件分别加入到你原来的查询语句中,形成两条SQL,做为子查询放在FROM后面。替换我上面语句中的表别名a和b。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表