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