sql >> Database teknologi >  >> RDS >> Oracle

Oracle SQL Group af if

SQL Fiddle

Oracle 11g R2 Schema Setup :

CREATE TABLE FILE_USAGE_LOG (TESTID, SITE, LATEST_READ, READ_COUNT, FILE_ORIGIN_ID ) AS
          SELECT 'File1', 'Site1', DATE '2013-05-02', 2, 1 FROM DUAL
UNION ALL SELECT 'File1', 'Site2', DATE '2014-01-22', 3, 2 FROM DUAL
UNION ALL SELECT 'File2', 'Site1', DATE '2014-06-02', 8, 0 FROM DUAL
UNION ALL SELECT 'File3', 'Site1', DATE '2014-09-19', 17, 0 FROM DUAL
UNION ALL SELECT 'File4', 'Site2', DATE '2014-09-19', 14, 2 FROM DUAL
UNION ALL SELECT 'File4', 'Site2', DATE '2014-09-19', 34, 1 FROM DUAL
UNION ALL SELECT 'File4', 'Site3', DATE '2014-09-19', 10, 0 FROM DUAL
UNION ALL SELECT 'File5', 'Site2', DATE '2014-09-19', 44, 2 FROM DUAL
UNION ALL SELECT 'File5', 'Site3', DATE '2014-09-19', 1, 2 FROM DUAL;
 

Forespørgsel 1 :

SELECT  TESTID,
        REGEXP_REPLACE( 
          LISTAGG( SITE, ', ' )
            WITHIN GROUP( ORDER BY SITE ),
          '([^, ]+)(, \1)+($|, )',
          '\1\3'
        ) AS SITES, 
        MAX( LATEST_READ ) AS LATEST_READ,
        SUM(READ_COUNT) AS Total_Read_Count
FROM    FILE_USAGE_LOG 
GROUP BY
        TESTID
HAVING  COUNT( CASE FILE_ORIGIN_ID WHEN 2 THEN NULL ELSE 1 END ) > 0
UNION ALL
SELECT  TESTID,
        SITE,
        LATEST_READ,
        READ_COUNT
FROM    FILE_USAGE_LOG l
WHERE   FILE_ORIGIN_ID = 2
AND     NOT EXISTS ( SELECT 'X'
                     FROM   FILE_USAGE_LOG x
                     WHERE  x.TESTID      = l.TESTID
                     AND    x.FILE_ORIGIN_ID <> 2
                   )
ORDER BY 1,2
 

Resultater :

| TESTID | SITES | LATEST_READ | TOTAL_READ_COUNT | |--------|--------------|-----------------------------|------------------| | File1 | Site1, Site2 | January, 22 2014 00:00:00 | 5 | | File2 | Site1 | June, 02 2014 00:00:00 | 8 | | File3 | Site1 | September, 19 2014 00:00:00 | 17 | | File4 | Site2, Site3 | September, 19 2014 00:00:00 | 58 | | File5 | Site2 | September, 19 2014 00:00:00 | 44 | | File5 | Site3 | September, 19 2014 00:00:00 | 1 |

Forespørgsel 2 :

SELECT  TESTID,
        REGEXP_REPLACE( 
          LISTAGG( SITE, ', ' )
            WITHIN GROUP( ORDER BY SITE ),
          '([^, ]+)(, \1)+($|, )',
          '\1\3'
        ) AS SITES, 
        MAX( LATEST_READ ) AS LATEST_READ,
        SUM(READ_COUNT) AS Total_Read_Count
FROM    FILE_USAGE_LOG 
WHERE   TESTID NOT LIKE 'this%'
AND     LATEST_READ BETWEEN DATE '2014-01-01' AND DATE '2014-12-31'
GROUP BY
        TESTID
HAVING  COUNT( CASE FILE_ORIGIN_ID WHEN 2 THEN NULL ELSE 1 END ) > 0
UNION ALL
SELECT  TESTID,
        SITE,
        LATEST_READ,
        READ_COUNT
FROM    FILE_USAGE_LOG l
WHERE   FILE_ORIGIN_ID = 2
AND     NOT EXISTS ( SELECT 'X'
                     FROM   FILE_USAGE_LOG x
                     WHERE  x.TESTID      = l.TESTID
                     AND    x.FILE_ORIGIN_ID <> 2
                     AND    TESTID NOT LIKE 'this%'
                     AND    LATEST_READ BETWEEN DATE '2014-01-01' AND DATE '2014-12-31'
                   )
AND     TESTID NOT LIKE 'this%'
AND     LATEST_READ BETWEEN DATE '2014-01-01' AND DATE '2014-12-31'
ORDER BY 1,2
 

Resultater :

| TESTID | SITES | LATEST_READ | TOTAL_READ_COUNT | |--------|--------------|-----------------------------|------------------| | File1 | Site2 | January, 22 2014 00:00:00 | 3 | | File2 | Site1 | June, 02 2014 00:00:00 | 8 | | File3 | Site1 | September, 19 2014 00:00:00 | 17 | | File4 | Site2, Site3 | September, 19 2014 00:00:00 | 58 | | File5 | Site2 | September, 19 2014 00:00:00 | 44 | | File5 | Site3 | September, 19 2014 00:00:00 | 1 |

  1. Sådan overvåges HAProxy-metrics med ClusterControl

  2. Er det muligt for SQL at finde poster med dubletter?

  3. MySQL-tidszoneforvirring

  4. SQL Server:CREATE ASSEMBLY for assembly 'Test' mislykkedes, fordi assembly 'Test' er forkert udformet eller ikke er en ren .NET assembly.