相关疑难解决方法(0)

如何在简单的PostgreSQL脚本中使用变量?

例如,在MS-SQL中,您可以打开查询窗口并运行以下命令:

DECLARE @List AS VARCHAR(8)

SELECT @List = 'foobar'

SELECT *
FROM   dbo.PubLists
WHERE  Name = @List
Run Code Online (Sandbox Code Playgroud)

如何在PostgreSQL中完成?可以吗?

postgresql variables

89
推荐指数
8
解决办法
23万
查看次数

生成PostgreSQL中两个日期之间的时间序列

我有这样的查询,很好地生成两个给定日期之间的一系列日期:

select date '2004-03-07' + j - i as AllDate 
from generate_series(0, extract(doy from date '2004-03-07')::int - 1) as i,
     generate_series(0, extract(doy from date '2004-08-16')::int - 1) as j
Run Code Online (Sandbox Code Playgroud)

它在2004-03-07和之间生成162个日期2004-08-16,这就是我想要的.这段代码的问题是,它不会得到正确的答案时,这两个日期都不同年份,例如,当我尝试2007-02-012008-04-01.

有更好的解决方案吗?

postgresql date time-series postgresql-9.1 generate-series

72
推荐指数
3
解决办法
7万
查看次数

如何在PostgreSQL中创建临时函数?

我必须在数据库中执行循环.这只是一次性要求.执行该函数后,我现在正在删除该函数.

有没有什么好的方法来创建临时/一次性功能?

sql postgresql sql-function

66
推荐指数
3
解决办法
2万
查看次数

plpgsql 错误:RETURN 在返回 void 的函数中不能有参数

我正在尝试提取与特定日期和 user_ids 对应的记录计数,这些记录在数据库中的下一个日期没有对应的 user_ids。这是我试图完成它的方式(使用 plpgsql 但不定义函数:

    DO
    $BODY$
    DECLARE
        a date[]:= array(select distinct start_of_period from monthly_rankings where balance_type=2);
        res int[] = '{}';
    BEGIN
        FOR i IN array_lower(a,1) .. array_upper(a,1)-1
        LOOP
            res:=array_append(res,'SELECT COUNT(user_id) from (select user_id from monthly_rankings where start_of_period=a[i] except select user_id from monthly_rankings where start_of_period=a[i+1]) as b');
                    i:=i+1;
            END LOOP;
            RETURN res;
        $BODY$ language plpgsql
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:无法检索结果:错误:RETURN 不能在返回 void LINE 11: RETURN res; 的函数中有一个参数。我是这种程序语言的新手,无法发现该函数返回 void 的原因。我确实将值分配给了变量,并且我声明了空数组,而不是 NULL 数组。是否有语法或更重要的推理错误?

sql syntax for-loop plpgsql postgresql-9.2

5
推荐指数
1
解决办法
2436
查看次数

从一个选择中除以两个计数

我有一张这样的表:

date(timestamp) Error(integer)   someOtherColumns
Run Code Online (Sandbox Code Playgroud)

我有一个查询来选择特定日期的所有行:

SELECT * from table
WHERE date::date = '2010-01-17'  
Run Code Online (Sandbox Code Playgroud)

现在我需要计算 Error 等于 0(从那天起)的所有行,并将其除以所有行的计数(从那天起)。

所以结果应该是这样的

Date(timestamp)      Percentage of failure
2010-01-17           0.30
Run Code Online (Sandbox Code Playgroud)

数据库相当大,数百万行..

如果有人知道如何在更多天里这样做,那就太好了——从一天到另一天。

Date(timestamp)      Percentage of failure
2010-01-17           0.30
2010-01-18           0.71
and so on
Run Code Online (Sandbox Code Playgroud)

sql postgresql select percentage

3
推荐指数
1
解决办法
1万
查看次数