postgres 数据库如何写循环

KING_OF_HK 2017-09-25 05:42:29
一条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
...全文
1534 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wandier 2017-10-12
  • 打赏
  • 举报
回复
group by date 不行吗
KING_OF_HK 2017-09-26
  • 打赏
  • 举报
回复
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);
KING_OF_HK 2017-09-25
  • 打赏
  • 举报
回复
end loop 上面加了v_idx=v_idx+1; 跳出循环了 可为什么没结果..
KING_OF_HK 2017-09-25
  • 打赏
  • 举报
回复
引用 1 楼 qq646748739 的回复:
试试这个: 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 $$;
语法没问题 但是SQL跑不出来 这段SQL 跑了2000秒了 都还没结果 十条SQL 连一下 几秒就出结果了
碧水幽幽泉 2017-09-25
  • 打赏
  • 举报
回复
试试这个:
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 $$;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧