如何在mysql存储过程中循环datetime

如何在mysql存储过程中循环datetime,mysql,sql,for-loop,Mysql,Sql,For Loop,我使用的是mysql存储过程,如何循环变量strathour每1小时有1小时的间隔,然后返回查询的ouptut(总计)。当starthour小于11月的日期时,它将有1小时的间隔并执行查询 这是我的密码: DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `sp_asessiontime`( out `total` int ) BEGIN declare `starthour`, `endhour` datetime; set `startho

我使用的是mysql存储过程,如何循环变量strathour每1小时有1小时的间隔,然后返回查询的ouptut(总计)。当starthour小于11月的日期时,它将有1小时的间隔并执行查询

这是我的密码:

DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `sp_asessiontime`(
out `total` int
)
BEGIN

declare `starthour`, `endhour` datetime;
set `starthour` = '2012-09-20 01:59:00';
set `endhour` = '2012-09-20 02:00:00';


select count(terminalcount.terminalids) into total from (
select distinct ts.TerminalID `terminalids` from
tmptransactiondetails td
inner join transactionsummary ts
on td.TransactionSummaryID = ts.TransactionsSummaryID
where
td.ServiceID = 4
and
td.TransactionType in ('D','W')
and
(ts.DateStarted >= starthour and ts.DateStarted < endhour)
or
(ts.DateEnded >= starthour and ts.DateEnded < endhour)
or
(ts.DateStarted < starthour and starthour <= ts.DateEnded)
)as terminalcount;
-每1小时循环一次

while 

starthour < '2012-11-01 01:59:00' do
select starthour + interval 1 hour;
select total as totalnumber;

end while;

END

非常感谢你们。

我不确定我是否正确回答了你们的问题,但这就是你们在约会之间循环的方式

set currHour = '2012-09-20 01:59:00';
set endhour = '2012-09-21 02:00:00';

REPEAT

-- execute your queries for every hour

Set currHour = DATE_ADD(currHour,INTERVAL 1 HOUR);
UNTIL currHour > endhour END REPEAT;
如果必须使用while循环:

WHILE currHour < endhour DO
  -- execute your queries for every hour
  Set currHour = DATE_ADD(currHour,INTERVAL 1 HOUR);
END WHILE;

您好,先生,它不起作用:我应该从2012年9月20日开始,直到2012年10月30日才能获取查询。请帮忙。谢谢你哪部分不起作用?如果您想在这些日期之间循环,请相应地设置currHour和endhour。您好,先生,curr hour将在11月份循环,这是endtime,而不是endhour。每当我尝试运行mysql时,mysql都会挂起。请先尝试较短的持续时间。确保你的逻辑正确。如果大的a循环对您的服务器来说太多,那么您可以始终以较小的块处理数据。您好,先生,非常感谢您,但是我需要将结果插入a表中。我如何才能做到这一点?抱歉这么晚才问你。无论如何,非常感谢你,这对我帮助很大。我希望有人能帮助我: