Netezza LAST_VALUE过滤器

时间:2011-10-21 15:36:16

标签: sql database-partitioning netezza

我试图创建一个只包含特定键的最新记录的NETEZZA表 - 例如想象一个表(MYTABLE),如下所示:

Col1 Col2 TIMESTAMP
xxxx xxxx 13:45
xxxx xxxx 13:46
xxxx yyyy 10:00

我想按如下方式返回一个表格:

Col1 Col2 TIMESTAMP
xxxx xxxx 13:46
xxxx yyyy 10:00

我猜我需要一些代码:

  Create table MYNEWTABLE as
    select *
    from MYTABLE
    WHERE rowid in
    (
    SELECT LAST_VALUE(rowid)
    OVER (PARTITION BY COL1, COL2
          ORDER BY TIMESTAMP)
          FROM MYTABLE
    )
    ORDER BY COL1,COL2
    distribute on (COL1)

然而,这不是真的有效,有人可以提供建议吗? (具体说明如何通过col1 / col2分区中的最后一个时间戳值过滤表)

3 个答案:

答案 0 :(得分:0)

得到它 - 终于! rowid是用词不当。 Credit向Netezza社区的Shawn Fox寻求灵感。

  Create table MYNEWTABLE as select * from
    (select *
            ,row_number() over (
                 partition by COL1, COL2 order by TIMESTAMP desc
                               ) row
       from MYTABLE 
    ) x
    WHERE x.row=1
    distribute on (COL1)

答案 1 :(得分:0)

以下查询应该可以正常工作。

CREATE TABLE TIMESTAMP_DATA_LATEST 如 SELECT Col1,Col2,MAX(Timestamp_val)AS Latest_TimeStamp 来自TIMESTAMP_DATA GROUP BY Col1,Col2;

此致 Venk

答案 2 :(得分:0)

如果您正在尝试实现SCD2 ..我的意思是从源表中仅将新记录插入目标表,然后您可以执行左外连接并将数据插入目标。 如果你的要求不同,请纠正我