2

私のデータベースには、注文を表す行がたくさんあります。

id | date
---------------------
1  | 2013-09-01
2  | 2013-09-01
3  | 2013-09-02
4  | 2013-09-04
5  | 2013-09-04

私が望むのは、欠落した日を含む、1 日あたりの行数を表示することです。そのため、出力は次のようになります。

2013-09-01 | 2
2013-09-02 | 1
2013-09-03 | 0
2013-09-04 | 2

1 つはレコードを、もう 1 つは日付を含む 2 つのテーブルを持つ例を見てきましたが、理想的には、このために 1 つのテーブルが必要です。

現在、レコードのある行は見つかりますが、ない日は見つかりません。

誰もこれを行う方法について考えを持っていますか?

ありがとう

4

3 に答える 3

0

次のストアド プロシージャを使用すると、7 日以上の結果を取得できます。必要な日数を渡すだけです。

DELIMITER $$

CREATE DEFINER=`server`@`%` PROCEDURE `test`(d INT)
BEGIN

    CREATE TEMPORARY TABLE dates 
    (
      f_day DATETIME
    );

    WHILE d > 0 DO
        INSERT INTO dates SELECT DATE(NOW())-d;
        SET d = d - 1;
    END WHILE;

    SELECT 
        IF(isnull(`id`),0,`id`), 
        `fixed_days`.`f_day`
    FROM t 
    RIGHT JOIN 
        dates AS `fixed_days` 
        ON t.`date` = `fixed_days`.`f_day`
    GROUP BY 
    `fixed_days`.`f_day`;

    DROP TABLE dates;
END
于 2013-09-25T11:59:31.550 に答える