sql >> データベース >  >> RDS >> Mysql

MySQLGROUPBYおよび空の行を埋める

    この回答では、カレンダーテーブルを生成する方法の概要を説明します。

    日、時間、分用に3つのテーブルを作成します:

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

    これで、次のようなクエリを使用して、特定の時間間隔で1分ごとに値を作成できます。

    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. PHPが古いmysql_queryをPDOに変更

    2. MySQL-クエリの速度をテストするためにキャッシュを使用しないように強制する

    3. Oracle10gの左結合で削除

    4. 1つが更新されたときに前の行の数値参照を更新するmysqlプロシージャ