SP &を使用して各日付の結果を取得しようとしています。ループを使用しており、SQL文をunion allを使用して追加していますが、可変日付の最終値を取ります。ストアドプロシージャmysqlで間違った結果が出る
表:
CREATE TABLE `bugs` (
`id` int(11) DEFAULT NULL,
`severity` int(11) DEFAULT NULL,
`open_date` date DEFAULT NULL,
`close_date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SP:
DELIMITER $$
DROP PROCEDURE IF EXISTS search$$
CREATE PROCEDURE search(startDate DATE, endDate DATE)
BEGIN
DECLARE result VARCHAR(255);
SET @iterDate = DATE(startDate);
SET @result = '';
label1: LOOP
SET @result = CONCAT(@result, ' SELECT DATE(@iterDate), count(*) FROM bugs WHERE open_date = DATE(@iterDate) AND close_date > DATE(@iterDate) UNION ALL');
SET @iterDate = DATE_ADD(@iterDate, INTERVAL 1 DAY);
IF @iterDate <= DATE(endDate) THEN
ITERATE label1;
END IF;
LEAVE label1;
END LOOP label1;
SET @result = LEFT(@result, LENGTH(@result)-LENGTH('UNION ALL'));
PREPARE stmt FROM @result;
EXECUTE stmt;
END$$
DELIMITER ;
これは、それぞれの日の日付範囲とレコード数がかかります。私の中では最後に形成されたクエリを実行するために最後の日付(endDate + 1)を取っています。
プロシージャの代わりに、私はカレンダーテーブルとLEFT JOINを使用します。 –