[英]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.