繁体   English   中英

重复序列中的 Oracle SQL 正则表达式总和按以下分组

[英]Oracle SQL regexp sum within repeating sequence grouped by

第一次来,希望有人能帮忙

下面存储在 Oracle CLOB 字段中的 XML 的 Oracle SQL select stmt 是什么,因此返回以下内容(每天将有多达 96 个 intvColl 块)。

基本上,第 2 个和第 3 个逗号之间的 intvColl 块中的数值需要按第一个逗号之前的日期以及第 3 个逗号之后的 varchar 进行求和和分组。

我猜 regexp_substr / 但不能完全到达那里。 第一条记录是第 1 个和第 2 个 intvColl 块的总和 第二个记录是第 3 个 intvColl 块的总和 第三个记录是第 4 个和第 5 个块的总和

MeterChannelID           Date         Sum     Quality   Count_of_records
6103044759-40011200-Q1   14/03/2016   1,387   A         2   
6103044759-40011200-Q1   14/03/2016     694   S         1 
6103044759-40011200-Q1   15/03/2016   1,433   A         2  

<uploadRegData>
    <intervalDataBlock>
        <setDateTime>16/03/2016-19:30:01</setDateTime>
        <intervalMinute>15</intervalMinute>
        <meterChannelID>6103044759-40011200-Q1</meterChannelID>
        <intvColl><intvData>14/03/2016,1,700,A</intvData></intvColl>
        <intvColl><intvData>14/03/2016,2,687,A</intvData></intvColl>
        <intvColl><intvData>14/03/2016,3,694,S</intvData></intvColl>
        <intvColl><intvData>15/03/2016,4,724,A</intvData></intvColl>
        <intvColl><intvData>15/03/2016,5,709,A</intvData></intvColl>
    </intervalDataBlock>
</uploadRegData>
SELECT MeterChannelID,
       "Date",
       SUM( value ) AS "Sum",
       Quality,
       COUNT(1) AS Count_of_Records
FROM   (
  SELECT MeterChannelID,
         TO_DATE( SUBSTR( data, 1, 10 ), 'DD/MM/YYYY' ) AS "Date",
         TO_NUMBER( SUBSTR(
                      data,
                      INSTR( data, ',', 1, 2 ),
                      LENGTH( data ) - INSTR( data, ',', 1, 2 ) - 2
                  ) ) AS value,
         SUBSTR( data, -1 ) AS Quality
  FROM   (
    SELECT EXTRACTVALUE( xml, '/uploadRegData/intervalDataBlock/meterChannelId' )
             AS MeterChannelID,
           EXTRACTVALUE( d.COLUMN_VALUE, '/intvData' ) AS data
    FROM   ( SELECT XMLType( column_name ) AS xml FROM table_name ) x,
           TABLE(
             XMLSequence(
               EXTRACT(
                 x.xml,
                 '/uploadRegData/intervalDataBlock/intvCol1/intvData'
               )
             )
           ) d
  )
)
GROUP BY MeterChannelID, "Date", Quality
ORDER BY MeterChannelID, "Date", Quality;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM