如何按日期间隔在两列中进行分组?

时间:2015-04-20 12:30:22

标签: sql oracle date

我有这样的表:

enter image description here

enter image description here

我需要找到file列的日期值和按日期 - 文件日期值间隔分组。我试过这样:

select date,regexp_substr(FILE, '[[:DIGIT:]]{12}') FILEDATE from table

显示日期和文件日期。如何按日期文件日期间隔进行分组?:

enter image description here

1 个答案:

答案 0 :(得分:1)

如果"DATE""FILE"列中的值具有相同的时间,则可以使用:

SELECT   "DATE" - TO_DATE( REGEXP_SUBSTR( "FILE", '\d{14}', 1, 1 ), 'YYYYMMDDHH24MISS' ) AS "INTERVAL"
         COUNT(1) AS "COUNT"
FROM     TABLE_NAME
GROUP BY "DATE" - TO_DATE( REGEXP_SUBSTR( "FILE", '\d{14}', 1, 1 ), 'YYYYMMDDHH24MISS' );

如果他们有不同的时间,那么将"INTERVAL"GROUP BY表达式包装在CEIL()(或FLOOR())函数中 - 您也可以TRUNC()减去之前的日期;像这样:

SELECT   TRUNC( "DATE" ) - TRUNC( TO_DATE( REGEXP_SUBSTR( "FILE", '\d{14}', 1, 1 ), 'YYYYMMDDHH24MISS' ) ) AS "INTERVAL"
         COUNT(1) AS "COUNT"
FROM     TABLE_NAME
GROUP BY TRUNC( "DATE" ) - TRUNC( TO_DATE( REGEXP_SUBSTR( "FILE", '\d{14}', 1, 1 ), 'YYYYMMDDHH24MISS' ) );