Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pilih data yang dikelompokkan berdasarkan waktu selama tengah malam

EDIT :Ini diuji sekarang:SQL Fiddle

Kuncinya hanyalah menyesuaikan group by sehingga apa pun sebelum jam 6 pagi dikelompokkan dengan hari sebelumnya. Setelah itu, penghitungannya cukup mudah.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL, isi nilai yang hilang dengan yang terdekat yang tidak hilang

  2. bagaimana cara menambah panjang keluaran kolom sqlplus?

  3. PLS-00103 Menemukan simbol> kesalahan saat menjalankan prosedur tersimpan

  4. Memilih n elemen teratas dari grup di Oracle

  5. LINGKUP untuk tabel REF