一條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
uj5u.com熱心網友回復:
試試這個: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 $$;
uj5u.com熱心網友回復:
語法沒問題 但是SQL跑不出來 這段SQL 跑了2000秒了 都還沒結果 十條SQL 連一下 幾秒就出結果了
uj5u.com熱心網友回復:
end loop 上面加了v_idx=v_idx+1; 跳出回圈了 可為什么沒結果..uj5u.com熱心網友回復:
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);
uj5u.com熱心網友回復:
group by date 不行嗎轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/81507.html
標籤:開發
