Я пытаюсь создать SQL-запрос, используя цикл while, который увеличивает дату и время на одну минуту каждую итерацию, а затем генерирует оператор выбора на основе времени:
declare @dt datetime
set @dt = '2011-7-21'
while @dt < '2011-7-22'
begin
select Count(*) From Actions Where Timestamp = @dt
set @dt = DATEADD(mi, 1, @dt)
end
Запрос работает, как и предполагалось, за исключениемчто каждая итерация цикла while создает новый запрос полностью, а не просто новую строку.Есть ли способ построить это так, чтобы его один запрос и каждая строка генерировались путем увеличения цикла?Я полагаю, что это происходит потому, что оператор select находится внутри цикла, но я не уверен, как создать его другим способом, который работает.
РЕДАКТИРОВАТЬ - Вот то, что я придумал, используя временную таблицу, но это медленно.Может быть, есть более быстрый способ?Если это не так, по крайней мере, это работает:
create table #temp
(
[DT] datetime not null,
[Total] int not null
)
declare @dt datetime
declare @result int
set @dt = '2011-7-21'
while @dt < '2011-7-22'
begin
set @result = Count(*) From Actions Where Timestamp = @dt
insert #temp ([DT],[Total]) values (@dt, @result)
set @dt = DATEADD(mi, 1, @dt)
end
select * from #temp;
drop table #temp;