一条SQL 需要写出前10天到昨天 每天的总计
 SELECT
    COUNT(DISTINCT 身份证) 
    FROM 表
    WHERE
    actv_dt::DATE<=CURRENT_DATE-i
我先写了十条SQL 用union all 连起来
有什么办法用循环做出来同样的结果 网上搜了循环办法 写出如下SQL  但是报错 结果见SQL 下方 求高手解决下 
用的是postgres 数据库do $$
declare
v_idx integer := 1;
begin
  while v_idx < 10 loop
    SELECT
    COUNT(DISTINCT 身份证) 
    FROM 表
    WHERE
    actv_dt::DATE<=CURRENT_DATE-(v_idx);
  end loop;
end $$;
[Err] ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function inline_code_block line 6 at SQL statement
更多 0

解决方案 »

  1.   

    试试这个:
    do $$
    declare
    v_idx integer := 1;
    v_cnt integer := 0;
    begin
      while v_idx < 10 loop
        select count(distinct 身份证) 
    into v_cnt
        from 表
        where
        actv_dt::DATE<=CURRENT_DATE-(v_idx);
      end loop;
    end $$;
      

  2.   

    语法没问题 但是SQL跑不出来 这段SQL 跑了2000秒了 都还没结果  十条SQL 连一下 几秒就出结果了
      

  3.   

    end loop 上面加了v_idx=v_idx+1; 跳出循环了 可为什么没结果..
      

  4.   

    SQL 改成了如下 能跑出结果了 但只有昨天的值 其他9天没有循环出结果CREATE OR REPLACE FUNCTION count_sfz (INT) RETURNS INT AS
    $$
    DECLARE v_idx INTEGER; v_cnt INTEGER :=0;
    BEGIN
    FOR v_idx IN 1..10 loop 
    select count(distinct 身份证)  INTO v_cnt
    FROM

    WHERE
    actv_dt :: DATE <= CURRENT_DATE - (v_idx) ;
    RETURN v_cnt;
    END loop ;
    END $$LANGUAGE plpgsql;
    SELECT count_sfz (10);
      

  5.   

    group by date 不行吗