【问题标题】:Condition and max reference in redshift window function红移窗口函数中的条件和最大参考
【发布时间】:2019-01-31 23:42:00
【问题描述】:

我有一份日期、帐户和数据来源的列表。我正在为每个帐户获取最新的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

非常感谢任何帮助。如有必要,我可以详细说明

【问题讨论】:

  • 除了唯一性之外,你还需要行号吗?

标签: amazon-redshift


【解决方案1】:

如果我正确理解了你的问题,这条 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

【讨论】:

    【解决方案2】:

    如果除了唯一性之外您不需要行号,那么这样的查询应该可以工作:

    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 的每个组合及其最大日期确保没有重复,那么 distinct 就足够了:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 2016-02-12
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多