【问题标题】:ROW_NUMBER() with Qualify clause in VerticaVertica 中带有 Qualify 子句的 ROW_NUMBER()
【发布时间】:2020-08-13 18:49:25
【问题描述】:
select a.pm_id, a.pm_name
from loc_table a
qualify row_number() over(partition by pm_id order by pm_name asc) =1;

我们可以在 Vertica 中这样写吗,我试过了,但 Vertica 不采用限定关键字,并且 from 子句必须在末尾。 任何人都可以解释上述查询的作用以及我们如何在 Vertica 中实现相同的功能。

【问题讨论】:

    标签: sql vertica


    【解决方案1】:

    Vertica 没有QUALIFY 子句。

    它所拥有的是分析限制子句

    像下面这样重写你的查询,如果你经常需要的话,运行一个简单的全局搜索替换:

    SELECT 
      a.pm_id
    , a.pm_name
    FROM loc_table a
    LIMIT 1 OVER(PARTITION BY pm_id ORDER BY pm_name ASC);
    

    【讨论】:

      【解决方案2】:

      我认为您需要 Vertica 中的子查询:

      select pm_id, pm_name
      from (select l.pm_id, l.pm_name,
                   row_number() over (partition by pm_id order by pm_name asc) as seqnum
            from loc_table l
           ) l
      where seqnum = 1;
      

      这几乎正是qualify 所做的。就像 having 过滤聚合列,qualify 过滤窗口函数一样。

      【讨论】:

      • 其实我必须用qualify子句来实现。你能帮我实现一下限定条款吗
      • @nodev_101 。 . .然后使用支持该子句的数据库,例如 Teradata。你不能使用你正在使用的数据库不支持的东西。
      猜你喜欢
      • 2014-01-03
      • 1970-01-01
      • 2013-07-06
      • 2012-05-11
      • 1970-01-01
      • 2021-12-31
      • 2020-11-23
      • 2010-11-30
      • 1970-01-01
      相关资源
      最近更新 更多