sql >> Database >  >> RDS >> Mysql

MySQL GROUP BY en vul lege rijen in

In dit antwoord zal ik uitleggen hoe u uw kalendertabellen kunt genereren.

Maak drie tabellen voor dagen, uren en minuten:

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

Vul de urentabel met de cijfers van 0 tot 23 en de minutentabel met de cijfers van 0 tot 59. Om de dagentabel te vullen, kunt u een procedure als volgt maken:

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

U kunt dan deze procedure aanroepen om dagen als volgt aan te maken:

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

U kunt nu waarden maken voor elke minuut in een bepaald tijdsinterval met behulp van een query die lijkt op de volgende:

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. Hoe $_POST een dynamisch toegewezen waarde in PHP?

  2. Mysql-opslagengine voor logtabel

  3. Het opslaan van json, jsonb, hstore, xml, enum, ipaddr, etc mislukt met kolom x is van het type json, maar de expressie is van het type karakter variërend

  4. Is het hebben van een 'OF' in een INNER JOIN-conditie een slecht idee?