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

Mengelompokkan catatan jam demi jam atau hari demi hari dan mengisi celah dengan nol atau nol di mysql

Buat dates_hours satu kolom tabel yang berisi semua tanggal dan jam dalam rentang yang wajar (misalnya dari 1900 hingga 2200). Kemudian lakukan LEFT JOIN dari tabel ini ke kueri Anda saat ini.

Agar teknik ini berfungsi dengan benar, Anda mungkin perlu menambahkan kolom terindeks ke tabel Anda yang berisi stempel waktu yang dikonversi (copied_timestamp Anda dikonversi ke DATETIME , dibulatkan ke jam)

SELECT date_hour, count(req.converted_timestamp)
FROM
    dates_hours 
    LEFT JOIN req ON req.converted_timestamp = dates_hours.date_hour
WHERE date_hour
    BETWEEN (SELECT MIN(req.converted_timestamp) FROM req)
    AND (SELECT MAX(req.converted_timestamp) FROM req)
GROUP BY date_hour

Untuk menghasilkan dates_hours tabel:

CREATE TABLE dates_hours (date_hour DATETIME PRIMARY KEY);

DELIMITER $$$
CREATE PROCEDURE generate_dates_hours (to_date DATETIME)
BEGIN

    DECLARE start_date DATETIME;
    DECLARE inc INT;

    SELECT MAX(date_hour) INTO start_date FROM dates_hours;
    IF start_date IS NULL THEN
        SET start_date = '1900-01-01';
    END IF;
    SET inc = 1;
    WHILE start_date + INTERVAL inc HOUR  <= to_date DO
        INSERT INTO dates_hours VALUE (start_date + INTERVAL inc HOUR);
        SET inc = inc +1;
    END WHILE;

END $$$
DELIMITER ;

CALL generate_dates_hours('2200-01-01');

Oke, sekarang setelah saya membaca sendiri, saya menyadari ini adalah solusi yang terlalu mengada-ada. Saya harap seseorang datang dengan yang lebih elegan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. keberhasilan kueri yang tidak terduga

  2. JDBC ResultSet getDate kehilangan presisi

  3. Pilih dua kolom dari tabel yang sama dengan kondisi WHERE yang berbeda

  4. ORACLE SQL | Memodifikasi data di ORDER BY

  5. Presisi Interval untuk nilai Fungsi PL/SQL