Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何强制红移中的零值?_Sql_Amazon Redshift - Fatal编程技术网

Sql 如何强制红移中的零值?

Sql 如何强制红移中的零值?,sql,amazon-redshift,Sql,Amazon Redshift,如果这是我的问题: select (min(timestamp))::date as date, (count(distinct(user_id)) as user_id_count (row_number() over (order by signup_day desc)-1) as days_since from data.table where timestamp >= current_date - 3 group by timestamp order by t

如果这是我的问题:

select
 (min(timestamp))::date as date,
 (count(distinct(user_id)) as user_id_count
 (row_number() over (order by signup_day desc)-1) as days_since
from
  data.table
where
  timestamp >= current_date - 3
group by
  timestamp
order by
  timestamp asc;
这是我的结果

date        | user_id_count   | days_since
------------+-----------------+-------------
2018-01-22  | 3               | 1
2018-01-23  | 5               | 0
如何使其显示在表中(其中用户ID计数为0?):


您需要生成日期。在Postgres中,
generate_series()

select g.ts as dte,
       count(distinct t.user_id) as user_id_count
       row_number() over (order by signup_day desc) - 1) as days_since
from generate_series(current_date::timestamp - interval '3 day', current_date::timestamp, interval '1 day') g(ts) left join
     data.table t
     on t.timestamp::date = g.ts
group by t.ts
order by t.ts;
您必须创建一个带有日期的“日历”表,并按如下方式加入聚合结果:

with 
aggregated_result as (
    select ...
)
select
 t1.date
,coalesce(t2.user_id_count,0) as user_id_count
,coalesce(t2. days_since,0) as days_since
from calendar t1
left join aggregated_result t2
using (date)

有关创建日历表的详细信息:

不确定这是否可行,是否尝试了
合并(计数(…),0)作为用户_id_count
?如果您使用整数形式,AFAIK会处理红移,这样您就可以加入一个生成天数的
生成系列,并将这些天数添加到当前日期,以获得您所关注的日期。这听起来很完美!我的数据库不断返回“函数generate_series(时间戳无时区,时间戳无时区,间隔)不存在”@user2928789。它确实存在(),但您也可以单独列出这些值。那么我是否正确地理解generate_series在红移上不起作用?@user2928789。你说得对。问题被标记为“postgres”,标题明确提到“postgres”。对不起,我以为Redshift运行的是postgres 8.0
with 
aggregated_result as (
    select ...
)
select
 t1.date
,coalesce(t2.user_id_count,0) as user_id_count
,coalesce(t2. days_since,0) as days_since
from calendar t1
left join aggregated_result t2
using (date)