Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 组合多个SQL select查询的结果_Mysql_Sql - Fatal编程技术网

Mysql 组合多个SQL select查询的结果

Mysql 组合多个SQL select查询的结果,mysql,sql,Mysql,Sql,我有一个表,其中有打开日期和关闭日期字段。我必须创建一个过程,给定一个日期范围作为输入,我将显示该范围内每个日期的所有记录,即打开日期>日期和关闭日期的记录 例如,如果我的桌子是 id open_date closed_date 1 2016-06-06 2016-06-10 2 2016-06-08 2016-06-11 日期范围为2016-06-07至2016-06-09 那么结果应该是 Date Count 2016-06-07

我有一个表,其中有打开日期和关闭日期字段。我必须创建一个过程,给定一个日期范围作为输入,我将显示该范围内每个日期的所有记录,即打开日期>日期和关闭日期的记录 例如,如果我的桌子是

id   open_date    closed_date
1    2016-06-06   2016-06-10
2    2016-06-08   2016-06-11
日期范围为2016-06-07至2016-06-09

那么结果应该是

Date          Count
2016-06-07      1
2016-06-08      2
2016-06-09      2
但我得到的结果是

 Date          Count
2016-06-09      2
我写下的程序如下

CREATE DEFINER=`root`@`localhost` PROCEDURE `find_number_of_bugs`(IN startDate DateTIme, IN endDate DateTime)
BEGIN
Declare testDate Date;
SET testDate=startDate;
while testDate<=endDate DO
select testDate as Dates ,count(bugID) as Number_Of_Bugs_Open from bugs where testDate between open_date and close_date OR close_date=null;
SET testDate=DATE_ADD(testDate,INTERVAL 1 DAY);
END while;
END
CREATE DEFINER=`root`@`localhost`过程`find\u number\u of\u bug`(在startDate-DateTIme中,在endDate-DateTIme中)
开始
宣布测试日期;
设置testDate=startDate;

testDate时,除了在多个结果集中,您正在删除所有结果。 您可以将所有查询结果保存在临时表中,并在最后查询一次

CREATE DEFINER=`root`@`localhost` PROCEDURE `find_number_of_bugs`(IN startDate DateTIme, IN endDate DateTime)
BEGIN
Declare testDate Date;
SET testDate=startDate;

CREATE TEMPORARY TABLE output (Dates date,Number_Of_Bugs_Open int);

while testDate<=endDate DO

insert into output select testDate as Dates ,count(bugID) as Number_Of_Bugs_Open from bugs where testDate between open_date and close_date OR close_date=null;

SET testDate=DATE_ADD(testDate,INTERVAL 1 DAY);
END while;

select * from output;

END
CREATE DEFINER=`root`@`localhost`过程`find\u number\u of\u bug`(在startDate-DateTIme中,在endDate-DateTIme中)
开始
宣布测试日期;
设置testDate=startDate;
创建临时表输出(日期、错误数、打开整数);

while testDateRemoved
SQL SERVER
tagWhy while循环。这当然是一个简单的问题。你有日历表吗?你需要的结果似乎与你的输入不匹配??请检查!如果我没有错的话,你为什么想要日期=2016-06-08的两个结果?最后一个应该是
2016-06-09 2
@NehaArora,P.s.如果你喜欢答案,你可能想要升级。我没有足够的声誉来这么做:D