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
...全文
1533 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 $$;
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。 PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。 事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。 本课程作为PostgreSQL数据库管理二,主要讲解以下内容:1.     PostgreSQL中的子查询2.     PostgreSQL公共表表达式3.     PostgreSQL数据的修改4.     PostgreSQL中的事务5.     PostgreSQL数据导入和导出6.     PostgreSQL数据库的管理7.     PostgreSQL表的管理

17,081

社区成员

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

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