请问个ORACLE的简单语句

海洋齐齐 2014-04-09 11:10:54
一、产品表Product,用于存放产品基本信息
ID NAME WORK_TIME(最后一次工作时间)
1 S1 2014-2-10 10:30:00
2 A1 2014-4-1 13:30:00
......

二、产品工作时间月表,每月自动创建,表名为Product_日期(比如Product_201402),此表会记录产品每天每次开机工作时间小时,就是一个产品每天会有多条数据,记录的是一开一关的时间,因为它不是24小时开机工作,而且数据量巨大,每月超过100万条记录
ID Product_ID WORK_HOUSE(工作小时) ON_TIME(开始工作时间)
1 1 5 2014-2-1 08:30:00
2 1 2 2014-2-9 08:30:00
3 1 1 2014-2-10 10:36:05
4 2 3 2014-4-1 13:00:00
5 2 3 2014-4-2 14:30:00
.......

现在我要列出所有产品,然后根据产品最后一次工作时间,取得最后工作时间前两日的工作总小时数,比如上面的测试数据最终获得是
ID NAME WORK_TIME(最后一次工作时间) LAST_WORK_HOUSE
1 S1 2014-2-10 10:30:00 3
2 A1 2014-4-1 13:30:00 3
...全文
295 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly_to_sky 2014-10-29
  • 打赏
  • 举报
回复
3楼说的对 可以弄个临时表之类的!
ccjk311 2014-04-21
  • 打赏
  • 举报
回复
3楼说的对,写存储过程吧,根据最后时间判断要查的product表,生成动态sql,把数据放到一个中间表里
fdw111111 2014-04-21
  • 打赏
  • 举报
回复
大师在哪里? 不知道怎么写呀
garfieldzf 2014-04-11
  • 打赏
  • 举报
回复
这个描述我是没看明白,
CT_LXL 2014-04-09
  • 打赏
  • 举报
回复
引用 楼主 jetaimejay 的回复:
一、产品表Product,用于存放产品基本信息 ID NAME WORK_TIME(最后一次工作时间) 1 S1 2014-2-10 10:30:00 2 A1 2014-4-1 13:30:00 ...... 二、产品工作时间月表,每月自动创建,表名为Product_日期(比如Product_201402),此表会记录产品每天每次开机工作时间小时,就是一个产品每天会有多条数据,记录的是一开一关的时间,因为它不是24小时开机工作,而且数据量巨大,每月超过100万条记录 ID Product_ID WORK_HOUSE(工作小时) ON_TIME(开始工作时间) 1 1 5 2014-2-1 08:30:00 2 1 2 2014-2-9 08:30:00 3 1 1 2014-2-10 10:36:05 4 2 3 2014-4-1 13:00:00 5 2 3 2014-4-2 14:30:00 ....... 现在我要列出所有产品,然后根据产品最后一次工作时间,取得最后工作时间前两日的工作总小时数,比如上面的测试数据最终获得是 ID NAME WORK_TIME(最后一次工作时间) LAST_WORK_HOUSE 1 S1 2014-2-10 10:30:00 3 2 A1 2014-4-1 13:30:00 3
SELECT T1.ID,
       T1.NAME,
       T1.WORK_TIME,
       (SELECT SUM(WORK_HOUSE)
          FROM (SELECT WORK_HOUSE,
                       ROW_NUMBER() OVER(ORDER BY ON_TIME DESC) RN
                  FROM PRODUCT_201402 T2
                 WHERE TO_CHAR(T2.ON_TIME, 'yyyymmdd') <=
                       TO_CHAR(T1.WORK_TIME, 'yyyymmdd')
                   AND T1.ID = T2.ID) T
         WHERE T.RN <= 2)
  FROM PRODUCT T1
gangma2 2014-04-09
  • 打赏
  • 举报
回复

select id, name, work_time, last_work_house
from product c,
(select a.product_id, sum(a.work_house) as last_work_house
from product_morth a, product b
where to_char(a.on_time, 'yyyymmdd') between
to_char(b.work_time - 1, 'yyyymmdd') and
to_char(b.work_time, 'yyyymmdd')
and a.product_id = b.id
group by product_id) d
where c.id = d.product_id(+);

CT_LXL 2014-04-09
  • 打赏
  • 举报
回复
引用 2 楼 jetaimejay 的回复:
谢谢你朋友,但是这个Product_201402是要根据产品最后一次工作时间来确定是哪个表的,比如2014-4-1那就应该是Product_201404
如果表名都是变动的,我觉得用一个SQL很难办。必须用存储过程+动态SQL来完成
海洋齐齐 2014-04-09
  • 打赏
  • 举报
回复
谢谢你朋友,但是这个Product_201402是要根据产品最后一次工作时间来确定是哪个表的,比如2014-4-1那就应该是Product_201404

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧