红移窗口功能中的条件和最大参考值

时间:2019-01-31 23:42:00

标签: amazon-redshift

我有一个日期,帐户和数据源的列表。我正在为每个帐户获取最近的max日期,并在我的窗口参考中使用该号码。

在我的窗口参考中,我正在使用row_number ()为要接收的每个帐户和数据源分配唯一的行,并按max日期对每个帐户和数据源进行排序数据。最终结果应该为每个唯一帐户+数据组合列出一行,并在该组合中提供最大日期。日期最高的记录将列出1。

我试图在我的窗口函数上设置一个条件,其中查询中仅列出填充为1的行,而其他行完全不显示。这是我在下面遇到的问题和卡住的地方:

SELECT
  date,
  account,
  data source,
  MAX(date) max_date,
  ROW_NUMBER () OVER (PARTITION BY account ORDER BY max_date) ROWNUM
FROM table
GROUP BY
  date,
  account,
  data source

任何帮助将不胜感激。如有必要,我可以详细介绍

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,则此SQL可以解决问题

SELECT 
  date,
  account,
  data source,
  MAX(date) max_date
FROM (    
      SELECT
        date,
        account,
        data source,
        MAX(date) max_date,
        ROW_NUMBER () OVER (PARTITION BY account ORDER BY max_date) ROWNUM
      FROM table
      GROUP BY
        date,
        account,
        data source
  )
where ROWNUM = 1

答案 1 :(得分:0)

如果除了唯一性之外,您不需要行号,那么应该执行如下查询:

select distinct t.account, data_source, date
from table t
join (select account, max(date) max_date from table group by account) m
on t.account=m.account and t.date=m.max_date

如果不同数据源的两条记录具有相同的日期,则仍然可以为一个帐户生成两条记录。如果有这种可能,那么mdem7的方法可能是最好的。

这个问题尚不清楚,但是如果您要使account和data_source的每个组合及其最大日期确保没有重复,那么不重复就足够了:

select distinct account, data_source, max(date) max_date
from table t
group by account, data_source