【问题标题】:How to order rows in a table within partitions?如何在分区内对表中的行进行排序?
【发布时间】:2014-05-30 15:40:07
【问题描述】:

我正在使用 DB2 获取一个表,将其拆分为多个分区,然后对每个分区中的行进行排序。我的表是这样的:

ID        DATE                 EVENT
--        ----                 -----
01        1999-06-01           a
01        1999-06-01           b
01        2006-01-01           a
01        2011-12-31           c
02        1999-01-01           a
02        2003-01-01           a
02        2003-01-01           b            
02        2009-11-12           b  

我想在哪里订购它以获得以下...

ID        DATE                 EVENT        SEQUENCE
--        ----                 -----        --------
01        1999-06-01           a            1
01        1999-06-01           b            1
01        2006-01-01           a            2  
01        2011-12-31           c            3 
02        1999-01-01           a            1
02        2003-01-01           a            2 
02        2003-01-01           b            2
02        2009-11-12           b            3

所以我正在尝试:

select a.*, row_number() over(partition by ID,order by DATE) from mytable a

这给了我:

  ID        DATE                 EVENT        SEQUENCE
    --        ----                 -----        --------
    01        1999-06-01           a            1
    01        1999-06-01           b            2
    01        2006-01-01           a            3  
    01        2011-12-31           c            4 
    02        1999-01-01           a            1
    02        2003-01-01           a            2 
    02        2003-01-01           b            3
    02        2009-11-12           b            4

如您所见,即使连续行可能与前一行具有相同的日期,这也会被忽略并迭代 SEQUENCE 列。

我如何确保如果下一行具有相同的日期,则保留序列直到出现具有较晚日期的行?

非常感谢。

【问题讨论】:

    标签: sql db2


    【解决方案1】:

    显然,row_number() 函数不会为窗口内的不同行返回相同的数字。您需要使用dense_rank() 函数。

    顺便说一句,您的查询有语法错误,列名使用保留字(本例中为“DATE”)不是一个好主意。

    【讨论】:

      【解决方案2】:

      您可以改用DENSE_RANK 函数,如果两行具有相同的值,您可以选择分配相同的排名,如下所示:

      select a.*, DENSE_RANK() OVER(PARTITION BY ID ORDER BY DATE DESC) from mytable a;
      

      参考文献

      Using OLAP specifications

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-23
        • 1970-01-01
        • 1970-01-01
        • 2021-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多