如何在MySQL存储过程中循环日期时间

4
我正在使用MySQL存储过程,如何编写一个循环,在每个1小时内变量strathour将具有1小时的间隔,然后返回查询的输出结果总数。当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

非常感谢大家。

希望有人可以帮助我 :( - Joy
1个回答

10

我不确定是否正确理解了你的问题,但以下是如何在日期之间循环的方法:

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日才能获取查询。请帮忙。谢谢。 - Joy
哪一部分出了问题?如果你想在这些日期之间循环,请相应地设置“currHour”和“endhour”。 - nunespascal
您好,当前时间循环在十一月份结束(即endtime),而不是结束时间。每当我尝试运行时,MySQL都会挂起。 - Joy
先尝试较短的持续时间。确保逻辑正确。如果大量循环对服务器造成太大负担,您可以始终将数据分成较小的块进行处理。 - nunespascal
您好,非常感谢您的帮助。但是我需要将结果插入到表格中,我该怎么做呢?很抱歉晚了才问您。无论如何,非常感谢您,这对我帮助很大。 - Joy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接