Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL GROUP BY и попълване на празни редове

В този отговор ще очертая как да генерирате вашите календарни таблици.

Създайте три таблици за дни, часове и минути:

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

Попълнете таблицата с часове с числата от 0 до 23 и таблицата с минутите с числата от 0 до 59. За да попълните таблицата с дните, можете да създадете процедура като следната:

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

След това можете да извикате тази процедура, за да създадете дни като този:

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

Сега можете да създавате стойности за всяка минута в даден интервал от време, като използвате заявка, подобна на следната:

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. Как да завъртите схема на MySQL обект-атрибут-стойност

  2. Как да запишете резултат от MySQL заявка в .CSV файл

  3. Какво се случва с низа за съвпадение на цяло число в MySQL?

  4. Как да намерите директорията с данни на mysql от командния ред в windows

  5. Трябва да изтегля данни въз основа на точната им последователност в масив