例如,在MS-SQL中,您可以打开查询窗口并运行以下命令:
DECLARE @List AS VARCHAR(8)
SELECT @List = 'foobar'
SELECT *
FROM dbo.PubLists
WHERE Name = @List
Run Code Online (Sandbox Code Playgroud)
如何在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-01
和2008-04-01
.
有更好的解决方案吗?
我必须在数据库中执行循环.这只是一次性要求.执行该函数后,我现在正在删除该函数.
有没有什么好的方法来创建临时/一次性功能?
我正在尝试提取与特定日期和 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 数组。是否有语法或更重要的推理错误?
我有一张这样的表:
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) postgresql ×4
sql ×3
date ×1
for-loop ×1
percentage ×1
plpgsql ×1
select ×1
sql-function ×1
syntax ×1
time-series ×1
variables ×1