postgres 如何写循环

KING_OF_HK 2017-09-25 05:38:47
一条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
...全文
2015 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
skysenlin 2017-12-08
  • 打赏
  • 举报
回复
天天学些,努力向上
trainee 2017-09-27
  • 打赏
  • 举报
回复
可用window(窗口)函数来实现, 只是没用过,要好好研究一下. 用存储过程, select 前要加return query
KING_OF_HK 2017-09-26
  • 打赏
  • 举报
回复
GROUP BY 是按每日总计身份证 我的需求要 累加到某天 比如 第一天1 条 第二天 2条 一直到第10天 10条 我想要一天SQL 跑出来结果 1 3 6 10 15 21 28 36 45 55 而不是 1 2 3 4 5 6 7 8 9 10
trainee 2017-09-26
  • 打赏
  • 举报
回复
楼上多写了个冒号, 没办法,人老眼花.
trainee 2017-09-26
  • 打赏
  • 举报
回复
这个不用写函数, group by 就可以了 SELECT cast(actv_dt as:DATE), COUNT(DISTINCT 身份证) FROM 表 WHERE actv_dt::DATE<=CURRENT_DATE-i group by cast(actv_dt as:DATE) 若要写函数,语法请看帮助, 帮助是最好的老师,不要没事就搜索.

952

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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