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

Vælg data grupperet efter tid over midnat

REDIGER :Det er testet nu:SQL Fiddle

Nøglen er simpelthen at justere group by så alt før kl. 06.00 bliver grupperet med den foregående dag. Derefter er tællingerne ret ligetil.

SELECT TO_CHAR(CASE WHEN EXTRACT(HOUR FROM timevalue) < 6
                    THEN timevalue - 1
                    ELSE timevalue
                    END, 'YYYY\MM\DD') AS day, 
       COUNT(*) AS overall, 
       SUM(CASE WHEN EXTRACT(HOUR FROM timevalue) >= 6 AND EXTRACT(HOUR FROM timevalue) < 14
                THEN 1 ELSE 0 END) AS morning,
       SUM(CASE WHEN EXTRACT(HOUR FROM timevalue) >= 14 AND EXTRACT(HOUR FROM timevalue) < 23
                THEN 1 ELSE 0 END) AS daytime,
       SUM(CASE WHEN EXTRACT(HOUR FROM timevalue) < 6 OR EXTRACT(HOUR FROM timevalue) >= 23
                THEN 1 ELSE 0 END) AS evening
FROM my_table
WHERE timevalue >= TO_TIMESTAMP('05.07.2015','DD.MM.YYYY')
GROUP BY TO_CHAR(CASE WHEN EXTRACT(HOUR FROM timevalue) < 6
                    THEN timevalue - 1
                    ELSE timevalue
                    END, 'YYYY\MM\DD');


  1. Videregivelse af værdier til indsæt-forespørgslen med valg-forespørgsel

  2. Indlæser .sql-filer fra PHP

  3. Opretter du et clustered-indeks i Oracle ved hjælp af en IOT? Forvirring

  4. SQL:Valg af kolonner baseret på kolonneværdi fra en anden tabel