当前位置: 代码迷 >> Oracle管理 >> 请教个ORACLE的简单语句
  详细解决方案

请教个ORACLE的简单语句

热度:90   发布时间:2016-04-24 04:12:11.0
请问个ORACLE的简单语句
一、产品表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

------解决思路----------------------
引用:
一、产品表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

------解决思路----------------------
引用:
谢谢你朋友,但是这个Product_201402是要根据产品最后一次工作时间来确定是哪个表的,比如2014-4-1那就应该是Product_201404

如果表名都是变动的,我觉得用一个SQL很难办。必须用存储过程+动态SQL来完成
  相关解决方案