Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Grupowanie rekordów godzina po godzinie lub dzień po dniu i wypełnianie luk zerem lub nullem w mysql

Wygeneruj jednokolumnową dates_hours tabela zawierająca wszystkie daty i godziny z rozsądnego zakresu (np. od 1900 do 2200). Następnie wykonaj LEFT JOIN z tej tabeli do bieżącego zapytania.

Aby ta technika działała poprawnie, prawdopodobnie będziesz musiał dodać do tabeli zaindeksowaną kolumnę, która zawiera przekonwertowany znacznik czasu (Twój copied_timestamp przekonwertowano na DATETIME , w zaokrągleniu do godziny)

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

Aby wygenerować dates_hours tabela:

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');

Dobra, teraz, kiedy sam robię korektę, zdaję sobie sprawę, że jest to dość daleko idące rozwiązanie. Mam nadzieję, że ktoś wymyśli bardziej elegancki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LISTAGG() Funkcja w Oracle

  2. Błąd w zapytaniu oracle Podzapytanie jednowierszowe zwraca więcej niż jeden wiersz

  3. JDBC Call to Oracle zwraca 3 znaki zapytania

  4. Zainstaluj db-oracle dla węzła js

  5. Jak mogę przetłumaczyć identyfikator FileNet ID w DB2/Oracle na przyjazny identyfikator GUID?