Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL GROUP BY i wypełnianie pustych wierszy

W tej odpowiedzi opiszę, jak generować tabele kalendarza.

Utwórz trzy tabele dla dni, godzin i minut:

CREATE TABLE days (
  day DATE,
  PRIMARY KEY (day)
) 
CREATE TABLE hours (
  hour INT,
  PRIMARY KEY (hour)
) 
CREATE TABLE minutes (
  minute INT,
  PRIMARY KEY (minute)
) 

Wypełnij tabelę godzin liczbami od 0 do 23, a tabelę minut liczbami od 0 do 59. Aby wypełnić tabelę dni, możesz utworzyć następującą procedurę:

CREATE PROCEDURE make_days(IN start_date DATE, IN end_date DATE)
BEGIN
  DECLARE curr_date DATE;
  SET curr_date = start_date;
  WHILE curr_date <= end_date DO
    INSERT IGNORE INTO days(day)  VALUES(curr_date);
    SET curr_date = DATE_ADD(curr_date, INTERVAL 1 DAY);
  END WHILE;
END

Następnie możesz wywołać tę procedurę, aby utworzyć takie dni:

CALL make_days('2011-01-01','2012-12-31');

Teraz możesz tworzyć wartości dla każdej minuty w określonym przedziale czasu, używając zapytania podobnego do następującego:

SELECT YEAR(day) AS year, MONTH(day) AS month, DAYOFMONTH(day) AS day, hour, minute
FROM days, hours, minutes
WHERE CAST(CONCAT(day,' ',hour,':',minute) AS DATETIME) BETWEEN '2011-08-31 22:00' AND '2011-09-01 10:00'
ORDER BY year, month, day, hour, minute


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz iloczyn wierszy (mnożenie)

  2. Wiele instrukcji wstawiania w pojedynczym ODBC ExecuteNonQuery (C#)

  3. Kolumna tabeli Mysql nie może mieć wartości Null

  4. WSTAW DO ... WYBIERZ Z ... W AKTUALIZACJI DUPLIKACJI KLUCZA

  5. Google App Engine i Cloud SQL:utracono połączenie z serwerem MySQL podczas „odczytu początkowego pakietu komunikacyjnego”