Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL GROUP BY et remplir les lignes vides

Dans cette réponse, je vais vous expliquer comment générer vos tableaux de calendrier.

Créez trois tableaux pour les jours, les heures et les minutes :

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

Remplissez le tableau des heures avec les nombres de 0 à 23 et le tableau des minutes avec les nombres de 0 à 59. Pour remplir le tableau des jours, vous pouvez créer une procédure comme celle-ci :

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

Vous pouvez ensuite appeler cette procédure pour créer des journées comme celle-ci :

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

Vous pouvez désormais créer des valeurs pour chaque minute dans un intervalle de temps donné à l'aide d'une requête semblable à la suivante :

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