Sql 遍历查询
我正在尝试遍历简单的查询Sql 遍历查询,sql,mariadb,Sql,Mariadb,我正在尝试遍历简单的查询 select a_id, count(ID), TIMESTAMPDIFF(SECOND,MIN(`Time`),MAX(`Time`)) from data where a_id = 1 这就是我设法创造的 DECLARE counter INT DEFAULT 0; WHILE counter < 10 BEGIN select a_id, count(ID), TIMESTAMPDIFF(SECOND,
select a_id, count(ID), TIMESTAMPDIFF(SECOND,MIN(`Time`),MAX(`Time`))
from data
where a_id = 1
这就是我设法创造的
DECLARE counter INT DEFAULT 0;
WHILE counter < 10
BEGIN
select a_id, count(ID), TIMESTAMPDIFF(SECOND,MIN(`Time`),MAX(`Time`))
from data
where a_id = counter
SET counter = counter + 1;
END
像这样使用
DECLARE @counter INT = 0
WHILE @counter < 10
BEGIN
select a_id, count(ID), TIMESTAMPDIFF(SECOND,MIN(`Time`),MAX(`Time`))
from data
where a_id = @counter
SET @counter = @counter + 1;
END
DECLARE@counter INT=0
而@counter<10
开始
选择一个\u id、count(id)、TIMESTAMPDIFF(秒)、MIN(`Time`)、MAX(`Time`)
从数据
其中a_id=@计数器
设置@counter=@counter+1;
结束
您不需要while
循环。您可以在单个查询中完成此操作。一种方法是:
with recursive ids as (
select 1 as id
union all
select id + 1
from ids
where id < 10
)
select d.a_id, count(*)
timestampdiff(second, min(d.`Time`), min(d.`Time`))
from ids left join
data d
on d.a_id = ids.id
order by ids.id;
您的主查询有几个sintax/逻辑错误。如果要使用聚合函数(
count
),则必须在查询结束时使用group by
子句。你清楚你的要求吗?它是有效的,我只需要行数。如果你能直接用sql解决你的查询,你为什么喜欢使用编程sintax?我该怎么做。我想在我的原始查询中从'where a_id=1'迭代到a_id=565。同样的问题'…MariaDB服务器版本,以便在第1行的'DECLARE@counter INT=0'附近使用正确的语法不是MariaDB的专家。。。但是变量没有在这个引擎上声明,比如set@counter=0
?
with recursive ids as (
select 1 as id
union all
select id + 1
from ids
where id < 10
)
select d.a_id, count(*)
timestampdiff(second, min(d.`Time`), min(d.`Time`))
from ids left join
data d
on d.a_id = ids.id
order by ids.id;
select d.a_id, count(*)
timestampdiff(second, min(d.`Time`), min(d.`Time`))
from data d
where a.id between 1 and 10
group by d.a_id