3

私は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

どうもありがとうございました。

4

1 に答える 1

9

私はあなたの質問を正しく得たかどうかはわかりませんが、これはあなたが日付の間をループする方法です

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-11-09T09:46:58.063 に答える