Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chọn dữ liệu được nhóm theo thời gian hơn nửa đêm

CHỈNH SỬA :Nó hiện đã được thử nghiệm: SQL Fiddle

Chìa khóa đơn giản là điều chỉnh nhóm group by để mọi thứ trước 6 giờ sáng được nhóm lại với ngày hôm trước. Sau đó, số lượng khá dễ hiểu.

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. Yêu cầu kết nối ODP.NET đã hết thời gian chờ

  2. Cập nhật một cột của cùng một bảng nếu có bản ghi trùng lặp

  3. Cách tìm các hàng bị khóa trong Oracle

  4. PL / SQL gọi một hàm bên trong một trình kích hoạt

  5. Lưu trữ kết quả của truy vấn trừ với nhiều cột trong một biến trong Oracle PL / SQL